1、localhost項目
例如【鯨島】這個中臺項目啟動地址是localhost。
使用chrome中的【click-to-react-component
】擴展, alt + 鼠標左鍵
選擇dom后跳轉到對應文件。
click-to-react-component的原理(來自ai)
click-to-react-component
的工作原理確實很巧妙,讓我來解釋一下:
-
React DevTools 集成
// 利用 React DevTools 提供的能力
window.__REACT_DEVTOOLS_GLOBAL_HOOK__
-
通過 Chrome 擴展機制,獲取頁面中的 React Fiber 樹
-
可以訪問到組件的內部信息,包括源碼位置
-
源碼映射(Source Maps)
// 開發環境下 webpack 會生成 source map
//# sourceMappingURL=main.js.map
-
利用瀏覽器開發者工具提供的 source map API
-
可以將編譯后的代碼位置映射回源代碼位置
-
DOM 到 React 組件的映射
// 簡化的原理示意
document.addEventListener('mouseover', (e) => {// 獲取 DOM 元素對應的 React Fiberconst fiber = getFiberFromDOM(e.target);// 通過 fiber 獲取源碼位置const sourceLocation = getSourceLocation(fiber);
});
-
編輯器通信
// 使用特殊協議打開編輯器
window.open(`vscode://file/${filePath}:${line}:${column}`);
主要區別:
-
code-inspector-plugin
需要在構建時注入信息 -
click-to-react-component
利用已有的開發工具基礎設施-
React DevTools
-
Source Maps
-
Chrome 擴展 API
-
這就是為什么 click-to-react-component
不需要修改項目代碼就能工作,因為它巧妙地利用了開發環境下已經存在的這些工具和信息。
2、非localhost項目
比如fs這類電商項目,這里使用 code-inspector 的打包插件。
使用
-
安裝npm插件
npm install code-inspector-plugin -D
//其他包版本過低就用命令: npm install code-inspector-plugin -D --legacy-peer-deps
-
在打包中使用這個插件
fs中修改configs/webpack.dev.js
const { codeInspectorPlugin } = require('code-inspector-plugin');plugins: [codeInspectorPlugin({bundler: 'webpack',}),]
-
項目啟動后用
shift + alt + 鼠標左鍵
選擇組件
原理(來自ai)
讓我來解釋一下 code-inspector 的核心工作原理:
-
編譯時注入
-
通過 webpack/vite 等構建工具的插件系統,在編譯過程中為每個組件注入位置信息
-
主要包含:文件路徑、行號、列號等源碼位置信息
-
運行時定位
// 簡化的原理示意
{// 開發環境下會注入類似這樣的代碼__CODE_INSPECTOR__: {filePath: 'src/components/Button.jsx',line: 10,column: 5}
}
-
事件監聽
-
監聽組合鍵(Alt+Shift)的按下
-
添加鼠標移動事件監聽器
-
在 DOM 元素上顯示遮罩層和位置信息
-
IDE 通信
-
使用
vscode://
等協議打開編輯器 -
通過 URL 參數傳遞文件路徑和位置信息
-
編輯器接收到請求后定位到對應位置
-
開發環境限制
if (process.env.NODE_ENV === 'development') {// 只在開發環境下注入代碼plugins.push(['code-inspector-plugin', {bundler: 'webpack'}]);
}
主要優點:
-
無侵入性 - 不需要修改源代碼
-
性能影響小 - 只在開發環境生效
-
支持多種框架 - React/Vue/Svelte 等
這就是為什么在你的 babel 配置中需要添加這個插件,它需要在編譯階段注入必要的位置信息。
其他類似的插件
-
locatorjs,這個插件提供chrome擴展