自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

跑 Npm Scripts,其實(shí)有更香的方式

開發(fā) 開發(fā)工具
每個(gè)項(xiàng)目都有 npm scripts,大多數(shù)人只是用它們而不會(huì)調(diào)試它們,所以就算每天用也不知道這些工具的原理。這些命令行工具都是在 package.json 中聲明一個(gè) bin 字段,然后 install 之后就會(huì)放到 node_modules/.bin 下??梢?node node_modules/.bin/xx 來跑,可以 npx xx 來跑,最常用的還是 npm scripts,通過 n

每個(gè)前端項(xiàng)目都有 npm scripts,我們會(huì)用 npm scripts 來組織編譯、打包、lint 等任務(wù)。

大家可能經(jīng)常會(huì)跑 npm scripts,但卻對(duì)這些命令行工具是怎么實(shí)現(xiàn)的并不了解。

那如果想了解這些工具的實(shí)現(xiàn)原理,應(yīng)該怎么做呢?

這就是今天的主題:調(diào)試 npm scripts。

這些命令行工具的 package.json 里都會(huì)有個(gè) bin 字段,來聲明有哪些命令:

圖片

npm install 這個(gè)包以后,就會(huì)放到 node_modules/.bin 目錄下:

圖片

這樣我們就可以通過 node ./node_modules/.bin/xx 來跑不同的工具了。

我們也可以用 npx 來跑,比如 npx xx,它的作用就是執(zhí)行 node_modules/.bin 下的本地命令,如果沒有的話會(huì)從 npm 下載然后執(zhí)行。

當(dāng)然,最常用的還是放到 npm scripts 里:

圖片

這樣就直接 npm run xxx 跑就行了。

npm scripts 本質(zhì)上還是用 node 來跑這些 script 代碼,所以調(diào)試他們和調(diào)試其他 node 代碼沒啥區(qū)別。

也就是可以這樣跑:

在 .vscode/launch.json 的調(diào)試文件里,選擇 node 的 launch program:

圖片

用 node 執(zhí)行 node_modules/.bin 下的文件,傳入?yún)?shù)即可:

圖片

其實(shí)還有更簡(jiǎn)單的方式,VSCode Debugger 對(duì) npm scripts 調(diào)試的場(chǎng)景做了封裝,可以直接選擇 npm 類型的調(diào)試配置:

圖片

直接指定運(yùn)行的命令即可:

圖片

比如我們就用這個(gè) create-react-app 創(chuàng)建的 react 項(xiàng)目來嘗試下 npm scripts 的調(diào)試:

先去 node_modules/.bin 下這個(gè)文件里打個(gè)斷點(diǎn):

圖片

然后點(diǎn)擊 debug 啟動(dòng):

圖片

你會(huì)發(fā)現(xiàn)會(huì)執(zhí)行 scripts 下的 start 模塊:

圖片

我們?cè)偃?start 下打個(gè)斷點(diǎn):

代碼執(zhí)行到這里斷?。?/p>

圖片

這個(gè) config 就是 webpack 的配置:

圖片

再往下走,會(huì)發(fā)現(xiàn)啟動(dòng)了一個(gè) server:

圖片

我們?cè)?server 啟動(dòng)的回調(diào)函數(shù)里打個(gè)斷點(diǎn),看看瀏覽器是怎么打開的:

圖片

點(diǎn)擊 step into 進(jìn)入這個(gè)斷點(diǎn):

圖片

然后單步執(zhí)行,會(huì)走到這樣的代碼:

依次通過 osascript 來啟動(dòng)這些瀏覽器,啟動(dòng)失敗的話,try catch 里直接忽略了:

圖片

這些瀏覽器 hover 上去就可以看到:

圖片

釋放斷點(diǎn),你就會(huì)發(fā)現(xiàn)瀏覽器打開了:

圖片

這樣,我們不就梳理了一遍 react-scripts start 的流程么?

總結(jié)一下就是這樣的:

  • 根據(jù)輸入的 start 命令,執(zhí)行 scripts/start 模塊
  • 根據(jù)配置,創(chuàng)建 webpack 的 Compiler 對(duì)象
  • 創(chuàng)建 WebpackDevServer
  • server 啟動(dòng)之后,啟動(dòng)瀏覽器打開 url
  • 打開 url 的實(shí)現(xiàn)就是通過 osascripts 依次嘗試那些瀏覽器

這樣調(diào)試完一遍,我們就對(duì) npm run start 有了更深入的認(rèn)識(shí)。

而且,調(diào)試的方式跑 script 和直接命令行 npm run start 沒啥區(qū)別。

要說區(qū)別,唯一的區(qū)別可能就是這個(gè):

默認(rèn)調(diào)試模式下,輸出的內(nèi)容會(huì)在 Debug Console 面板顯示:

圖片

但這個(gè)也可以改:

圖片

可以切換成 integratedTerminal,那就會(huì)輸出在 terminal 了:

圖片

這樣就和平時(shí) npm run start 執(zhí)行沒了任何區(qū)別,而且還可以斷點(diǎn)調(diào)試,它不香么?

我們?cè)賮砜磦€(gè)例子,比如 vue cli 創(chuàng)建的 vue 項(xiàng)目,在 vue.config.js 里可以改 webpack 配置:

圖片

但如果你想知道默認(rèn)的配置是啥呢?console.log 么?

console.log 打印大對(duì)象可不是個(gè)好主意,它是這樣的:

圖片

有的同學(xué)說用 JSON.stringify,那個(gè)更難看,特別長(zhǎng)的一串。

如果你會(huì)了調(diào)試 npm scripts 呢?

你就可以加一個(gè) npm 類型的調(diào)試配置:

圖片

然后打個(gè)斷點(diǎn),debug 來跑:

圖片

啥配置都能看到,這不香么?

我舉的例子只是 webpack 的,但其余的 npm scripts,比如 babel、tsc、eslint、vite 等等都是一樣的調(diào)試方式。

總結(jié)

每個(gè)項(xiàng)目都有 npm scripts,大多數(shù)人只是用它們而不會(huì)調(diào)試它們,所以就算每天用也不知道這些工具的原理。

這些命令行工具都是在 package.json 中聲明一個(gè) bin 字段,然后 install 之后就會(huì)放到 node_modules/.bin 下。

可以 node node_modules/.bin/xx 來跑,可以 npx xx 來跑,最常用的還是 npm scripts,通過 npm run xx 來跑。

npm scripts 的調(diào)試就是 node 的調(diào)試,只不過 VSCode Debugger 做了簡(jiǎn)化,可以直接創(chuàng)建 npm 類型的調(diào)試配置。

把 console 配置為 integratedTerminal 之后,日志會(huì)輸出到 terminal,和平時(shí)直接跑 npm run xx 就沒區(qū)別了。而且還可以斷點(diǎn)看看執(zhí)行邏輯。

跑 npm scripts 之余,還可以理一下它的實(shí)現(xiàn)邏輯,哪里感興趣斷在哪里,這不比直接跑香么?

責(zé)任編輯:武曉燕 來源: 神光的編程秘籍
相關(guān)推薦

2012-10-25 14:14:14

云計(jì)算架構(gòu)師峰會(huì)

2020-12-02 18:57:00

Wi-FiMiMo無線

2015-04-10 13:27:44

微軟Azure萊森米

2019-10-09 09:42:39

MySQL陷阱數(shù)據(jù)庫

2021-04-15 06:02:50

CSS 三角形技巧

2022-05-27 15:41:22

微軟騰訊

2017-03-31 01:37:01

FreeWheel運(yùn)維

2022-02-23 20:42:40

HTMLmarkdownturndown

2022-11-17 15:05:12

學(xué)術(shù)

2011-07-19 15:44:18

Xcode 卸載

2021-08-02 13:05:49

瀏覽器HTTP前端

2018-12-21 09:02:35

5G芯片供應(yīng)商

2010-05-21 09:09:00

2020-09-27 08:33:40

微信QQ傳文件

2009-09-22 13:25:54

Hibernate M

2020-04-07 19:16:31

微信隱藏功能移動(dòng)應(yīng)用

2010-03-25 19:01:43

ngnix配置文件

2023-09-27 10:23:19

NoSQL數(shù)據(jù)模型

2019-01-04 12:46:03

程序員技能溝通

2012-08-20 09:22:32

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)