通过webpack的配置来调试React17的源码

最近在学习React17的源码,学习源码的时候肯定是边调试边看最好,于是就在网上找了源码的调试方法,网上有两种方式可以实现源码的调试:

第一种:

1、去React的gitHub上面把相应的源码clone下来

2、通过yarn安装依赖(这个过程中会出现很多问题)

3、安装完依赖之后就可以通过以下命令生产软连接

yarn build react/index,react/jsx-dev-runtime,react-dom/index,scheduler --type=NODE

cd build/node_modules/react
yarn link
cd build/node_modules/react-dom
yarn link

4、把生成好的软连接link到对应的调试项目中。

因为我在步骤2中遇到很多问题,解决了很久没有解决,所以我就放弃了该方式。采用了第二种方式。

第二种:

利用webpack来实现。

1、通过yarn eject命令暴露出webpack的配置

2、然后在webpack.config.js中修改配置文件

  a、注释ESLintPlugin

  b、在alias中引用以下包: 

 'react': path.resolve(__dirname, '../src/react/packages/react'),
 'react-dom': path.resolve(__dirname, '../src/react/packages/react-dom'),
 'shared': path.resolve(__dirname, '../src/react/packages/shared'),
 'react-reconciler': path.resolve(__dirname, '../src/react/packages/react-reconciler'),
 'react-events': path.resolve(__dirname, '../src/react/packages/events')

  c、在config的env.js中增加以下变量:

const stringified = {
    // 新增的调试属性
    __DEV__: true,
    __PROFILE__: true,
    __UMD__: true,
    __EXPERIMENTAL__: true,
    //
    'process.env': Object.keys(raw).reduce((env, key) => {
      env[key] = JSON.stringify(raw[key]);
      return env;
    }, {}),
  };

  d、在根目录下新建.eslintrc.json文件,内容为

{
  "extends": "react-app",
  "globals": {
    "__DEV__": true,
    "__PROFILE__": true,
    "__UMD__": true,
    "__EXPERIMENTAL__": true   
  }
}

  e、react目录下的.eslintrc.js也需要修改

---// extends: ['fbjs', 'prettier'],
+++  extends: [],

  f、shared目录下的invariant.js修改

---// if (condition) { return; }
++ return

  g、share目录下的ReactSharedInternals.js修改:

// const ReactSharedInternals =
//   React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
import ReactSharedInternals from '../react/src/ReactSharedInternals'

  h、src目录下的index.js修改

// import React from 'react';
// import ReactDOM from 'react-dom';
import * as React from 'react';
import * as ReactDOM from 'react-dom';

  完成以上操作就可以调试React17的源码了。

posted @ 2021-11-04 15:03  闯入码途的水产人  阅读(229)  评论(0编辑  收藏  举报