调试页面快速定位源码

237 阅读4分钟

准备项目

npx create-react-app react_zustand --template typescript
  • 安装依赖,
  • 启动项目,

我的项目大概就是这样:

image.png

想要快速上手项目,对应的到源码位置今天介绍一款 code-inspector-plugin

是一款基于 webpack/vite/rspack/nextjs/nuxt/umijs plugin 的提升开发效率的工具,点击页面上的 DOM,它能够自动打开你的 IDE 并将光标定位到 DOM 对应的源代码位置。

动机 

在 web 开发中,当我们要修改一个组件的代码时,首先需要找到组件对应的代码位置。对于一些大型项目,代码文件数量多、文件层级深,要快速找到对应的代码位置并不是一件容易的事情。尤其是对于一个新接触项目的开发者来说,查找组件对应的代码位置往往费时费力。

因此,我们渴望有一种方式能让开发者快速定位到组件对应的代码,code-inspector-plugin 便应运而生了。只需要鼠标点击页面上的元素,就能够自动打开你的 IDE 并将光标定位到 DOM 对应的源代码位置,这样可以大幅提升开发者的体验和效率。

优点 

开发提效 

点击页面上的 DOM 元素,它能自动打开 IDE 并将光标定位至 DOM 的源代码位置,大幅提升开发体验和效率

简单易用 

对源代码无任何侵入,只需要在打包工具中引入就能够生效,整个接入过程如喝水般一样简单

适配性强 

支持在 webpack/vite/rspack/rsbuild/esbuild/farm/nextjs/nuxt/umijs 中使用,支持 vue/react/preact/solid/qwik/svelte/astro 等多个框架

上面的是官网的介绍,基本生成项目的常见脚手架就都包括了,那么我们现在集成到自己的项目中

  • 先安装依赖
npm install code-inspector-plugin -D
yarn add code-inspector-plugin -D
pnpm add code-inspector-plugin -D //都是可以的

我的项目是用cra搭的那么要扩展现有的项目那么需要craco 可以让你在不“eject”项目的情况下扩展 CRA 的 webpack 配置

eject 的代价 运行 npm run eject 会永久暴露所有配置文件和脚本,导致:

-   失去 CRA 的版本自动升级能力;
-   需自行维护所有配置,复杂度陡增。`

所以使用 craco (推荐)

craco (Create React App Configuration Override)  是一个非常流行的工具,它允许你在不 eject 的情况下覆盖 CRA 的内部配置,包括 webpack、Babel、ESLint 等。这是最推荐的方式,因为它既能让你定制化,又能保持 CRA 的可升级性。

步骤:

  1. 安装 craco

    Bash

    npm install @craco/craco --save-dev
    # 或者
    yarn add @craco/craco --dev
    
  2. 修改 package.json 中的脚本:  将 react-scripts 替换为 craco

    JSON

    "scripts": {
      "start": "craco start",
      "build": "craco build",
      "test": "craco test",
      "eject": "react-scripts eject" // eject 保持不变
    },
    
  3. 创建 craco.config.js 文件:  在项目的根目录下创建一个 craco.config.js 文件。在这个文件中,你可以编写 JavaScript 来修改 webpack 配置。

    例如,如果你想添加一个 webpack 插件(比如 DefinePlugin)和一个 loader(比如处理 Markdown 文件):

// craco.config.js

const webpack = require('webpack');

const path = require('path');

const { codeInspectorPlugin } = require('code-inspector-plugin');

module.exports = {

webpack: {

// 配置 webpack 插件

plugins: [

// new webpack.DefinePlugin({

// // 定义全局变量,例如在代码中可以使用 process.env.MY_VAR

// 'process.env.MY_VAR': JSON.stringify('这是我的自定义变量'),

// }),

codeInspectorPlugin({//将插件配置到webpack的插件槽中

bundler: 'webpack',

}),

],

// 配置 webpack loaders

// configure: (webpackConfig, { env, paths }) => {

// // 添加一个新的 loader 规则来处理 .md 文件

// webpackConfig.module.rules.push({

// test: /\.md$/,

// use: 'raw-loader', // raw-loader 可以将文件内容作为字符串导入

// });

  


// // 如果需要修改现有的 loader,例如修改 Babel loader

// // webpackConfig.module.rules.forEach(rule => {

// // if (rule.oneOf) {

// // rule.oneOf.forEach(oneOfRule => {

// // if (oneOfRule.loader && oneOfRule.loader.includes('babel-loader')) {

// // // 在这里修改 Babel loader 的配置

// // }

// // });

// // }

// // });

  


// return webpackConfig;

// },

},

// 如果你想配置 Babel 或者 ESLint 也可以在这里添加

// babel: {

// plugins: [

// // ...你的 Babel 插件

// ],

// },

// eslint: {

// mode: 'file',

// configure: {

// rules: {

// 'no-unused-vars': 'off', // 示例:关闭 ESLint 的 no-unused-vars 警告

// },

// },

// },

};

对照着上面的代码,修改对应的配置文件,之后重新启动项目:

image.png (Mac 系统默认组合键是 Option + Shift;Window 的默认组合键是 Alt + Shift,在浏览器控制台会输出相关组合键提示) 启动后,点击对应位置就会出现源码中的位置,然后点击,就跳到你ide的源码位置了。