vscode調(diào)試react?最初的源碼解析
如果直接在react項目中打點調(diào)試, 調(diào)試的是 react-dom.development.js,


而源碼里這些邏輯是分散在不同的包里的,如何才能夠調(diào)試 React 最初的源碼呢?
JS 代碼經(jīng)過編譯,會產(chǎn)生目標(biāo)代碼,但同時也會產(chǎn)生 sourcemap。sourcemap 的作用就是映射目標(biāo)代碼中的位置和源碼中的位置。
那這么說我們只要讓 react-dom.development.js 關(guān)聯(lián)上 sourcemap,就能調(diào)試最初的 React 源碼了?

步驟如下:
git clone https://github.com/facebook/react- 為了保證一定能正常生成 sourcemap,建議 reset 到
git reset --hard 80f3d88190c07c2da11b5cac58a44c3b90fbc296- 打開package 里的構(gòu)建打包文件: ./scripts/rollup/build.js

找到 rollup 的配置,添加一行 sourcemap: true,這個很容易理解,就是讓 rollup 在構(gòu)建時產(chǎn)生 sourcemap:

構(gòu)建的過程中會進行多次轉(zhuǎn)換,會生成多次 sourcemap,然后把 sourcemap 串聯(lián)起來就是最終的 sourcemap。如果中間有一步轉(zhuǎn)換沒有生成 sourcemap,那就斷掉了,也就沒法把 sourcemap 串聯(lián)起來了。只要找出沒有生成 sourcemap 的那幾個插件注釋掉就可以了, 同樣在/scripts/rollup/build.js文件中: 這個是刪除 use strict 用的,可以去掉:

2:這個是生產(chǎn)環(huán)境壓縮代碼的,也可以去掉

3:這個是用 prettier 格式化代碼的,也可以去掉。

npm run build, 這樣我們就成功的 build 出了帶有 sourcemap 的 react 包!


我們已經(jīng) build 出了帶有 sourcemap 的 react 和 react-dom 包,那把這倆包復(fù)制到測試項目的 node_modules 下,就可以直接調(diào)試最初的源碼了么?

我們改造了 build 流程,對 react 源碼進行了 build,產(chǎn)生了帶有 sourcemap 的 react、react-dom 包,這些包最終導(dǎo)出的是 react-xx.development.js。
之后在項目里引入,經(jīng)過 webpack 打包,產(chǎn)生了 bundle.js 和 sourcemap。
之后調(diào)試工具運行代碼的時候,會解析 sourcemap,完成從 bundle.js 到 react-xxx.development.js 的映射:
但是并不會再次做 react-xx.development.js 到 react 最初源碼的映射呀。
也就是調(diào)試工具只會解析一次 sourcemap。
那怎么辦呢?
不打包 react 和 react-dom 這倆包不就行了。不經(jīng)過 webpack 打包,那就沒有 webpack 產(chǎn)生的 sourcemap,不就一次就映射到 React 最初的源碼了么。
那怎么不打包這倆模塊呢?
webpack 支持 externals 來配置一些模塊使用全局變量而不進行打包,這樣我們就可以單獨加載 react、react-dom,然后把他們導(dǎo)出的全局變量配置到 externals 就行了。
初始化一個react項目
npx create-react-app my-app
新建 .vscode/launch.json
{
“configurations”: [
{
“name”: “Launch Chrome”,
“request”: “l(fā)aunch”,
“type”: “pwa-chrome”,
“url”: “http://localhost:3000”,
“webRoot”: “${workspaceFolder}”
}
]
}npm run eject: 項目下會多出 config 目錄和 public 目錄,這倆分別放著 webpack 配置和一些公共文件。修改 webpack 配置,在 externals 下添加 react 和 react-dom 包對應(yīng)的全局變量:注意這里的大小寫要小心,不能寫錯

5. 然后把 react.development.js 和 react-dom.development.js 放到 public 下,并在 index.html 里面加載這倆文件:

這樣就表示成功了

參考鏈接:
https://juejin.cn/post/7126501202866470949
到此這篇關(guān)于vscode調(diào)試react 最初的源碼的文章就介紹到這了,更多相關(guān)vscode調(diào)試react 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VSCode 配置React Native開發(fā)環(huán)境的方法
本篇文章主要介紹了VSCode 配置React Native開發(fā)環(huán)境的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來
這篇文章主要介紹了react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
基于CSS實現(xiàn)MaterialUI按鈕點擊動畫并封裝成 React 組件
筆者先后開發(fā)過基于vue,react,angular等框架的項目,碧如vue生態(tài)的elementUI, ant-design-vue, iView等成熟的UI框架, react生態(tài)的ant-design, materialUI等,這些第三方UI框架極大的降低了我們開發(fā)一個項目的成本和復(fù)雜度,使開發(fā)者更專注于實現(xiàn)業(yè)務(wù)邏輯和服務(wù)化2021-11-11
在React中寫一個Animation組件為組件進入和離開加上動畫/過度效果
這篇文章主要介紹了在React中寫一個Animation組件為組件進入和離開加上動畫/過度效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06
使用React+ts實現(xiàn)無縫滾動的走馬燈詳細過程
這篇文章主要給大家介紹了關(guān)于使用React+ts實現(xiàn)無縫滾動的走馬燈詳細過程,文中給出了詳細的代碼示例以及圖文教程,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-08-08

