V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
moonrailgun
V2EX  ›  分享创造

源码快速定位工具 source-ref

  •  1
     
  •   moonrailgun ·
    moonrailgun · 2022-07-06 17:18:18 +08:00 · 1724 次点击
    这是一个创建于 871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    source-ref 是一款通过网页点击快速定位到源码的工具,用于解决从视觉上快速定位到所在源码具体位置。与现有的devtools(vue-devtools/react-developer-tools)的源码定位互补

    • UI 框架支持 React, Vue框架
    • 打包工具支持 webpack,rollup, vite
    • 跳转方式支持 vscode 打开, Github 打开

    官方网站: https://sourceref.moonrailgun.com/
    开源地址: https://github.com/moonrailgun/source-ref

    演示

    定位到 Github 源码

    github

    使用 vscode 打开源码

    vscode

    快速接入

    react + webpack 为例:

    npm install source-ref-runtime
    npm install -D source-ref-loader
    

    webpack.config.json 中, 处理 jsx 文件的 loader 的最下面插入source-ref-loader:

    {
      test: /.tsx?$/,
      exclude: /node_modules/,
      use: [
        {
          loader: 'esbuild-loader',
          options: {
            loader: 'tsx',
            target: 'es2015',
          },
        },
        {
          loader: 'source-ref-loader',
        },
      ],
    }
    

    在入口文件处,插入:

    import('source-ref-runtime').then(({ start }) => start())
    

    打开项目,Alt(option in mac) + LMB(鼠标左键点击) 即可弹出选择框

    更多示例见官网: https://sourceref.moonrailgun.com/

    原理

    原理

    打包阶段:

    • 解析源码到 AST, 找到组件节点的开头部分插入当前所在位置信息
    • 将处理好的 AST 转换回原来的代码形式

    渲染阶段:

    • 优化提示路径, 减少长路径带来的视觉污染(在 devtools)
    • 快捷键点击 DOM 元素,弹出选择框。
    • 点击选择节点,通过打开 vscode 注册的 URI Scheme 从网页打开一个文件并定位到具体行号和列号
    2 条回复    2022-07-09 14:19:42 +08:00
    Geo200
        1
    Geo200  
       2022-07-08 09:25:10 +08:00
    想问下这个流程图是用什么工具画的?这个风格和 UI 不想是 drawio 上的
    moonrailgun
        2
    moonrailgun  
    OP
       2022-07-09 14:19:42 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1390 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.