一、npm scripts 的生命周期鉤子(Lifecycle Scripts)
npm 提供了一些 ??特殊的 script 名稱??,它們是 ??生命周期鉤子??,會在特定時機 ??自動執行??。這些鉤子包括:
1.prepublishOnly(在 npm publish之前執行(僅發布前))
2.prepublish((已廢棄,不推薦使用)在打包或發布前執行)
3.prepare(在 npm publish或 npm install(本地安裝)時執行,包括 git clone后的安裝)
4.preinstall(在安裝依賴之前執行)
5.install(安裝依賴時執行)
6.postinstall(在安裝依賴之后執行(最常用的鉤子之一))
7.preuninstall(在卸載包之前執行)
8.uninstall(在卸載包時執行)
9.postuninstall(在卸載包之后執行)
10.preversion(在修改版本號之前執行(比如 npm version patch))
11.version(修改版本號時執行)
12,postversion(修改版本號之后執行)
13.pretest(在運行 npm test之前執行)
14.test(運行測試)
15.posttest(在運行 npm test之后執行)
16.prestop(在運行 npm stop之前執行)
17.stop(停止服務)
18.poststop(在運行 npm stop之后執行)
19.prestart(在運行 npm start之前執行)
20.start(啟動服務)
21.poststart(在運行 npm start之后執行)
22.prerestart(在運行 npm restart之前執行)
23.restart(重啟服務)
24.postrestart(在運行 npm restart之后執行)
二、與 npm run build相關的鉤子
雖然 build本身不是 npm 的生命周期鉤子,但如果你在 package.json的 scripts中按如下方式定義了多個腳本:
{"scripts": {"prebuild": "echo '即將開始構建...'","build": "webpack --mode production","postbuild": "echo '構建完成!'"}
}
那么當你運行: npm run build
在 npm 中,當你運行 npm run build命令時,npm 會根據你項目中的 package.json文件里 scripts字段下定義的 build腳本來執行相應的命令。但除了你顯式定義的 build腳本本身,npm 還會在腳本執行 ??前后?? 自動觸發一些 ??生命周期鉤子(Lifecycle Hooks)??,這些鉤子是 npm 內置的機制,在特定階段自動運行。
不過,??npm 默認并不會在運行 npm run build時自動執行額外的鉤子,除非你顯式地在 package.json的 scripts中定義了它們,或者它們是 npm 生命周期腳本中與 build相關聯的鉤子。??
一、npm scripts 的生命周期鉤子(Lifecycle Scripts)
npm 提供了一些 ??特殊的 script 名稱??,它們是 ??生命周期鉤子??,會在特定時機 ??自動執行??。這些鉤子包括:
鉤子名稱
觸發時機
prepublishOnly
在 npm publish之前執行(僅發布前)
prepublish
(已廢棄,不推薦使用)在打包或發布前執行
prepare
在 npm publish或 npm install(本地安裝)時執行,包括 git clone后的安裝
preinstall
在安裝依賴之前執行
install
安裝依賴時執行
postinstall
在安裝依賴之后執行(最常用的鉤子之一)
preuninstall
在卸載包之前執行
uninstall
在卸載包時執行
postuninstall
在卸載包之后執行
preversion
在修改版本號之前執行(比如 npm version patch)
version
修改版本號時執行
postversion
修改版本號之后執行
pretest
在運行 npm test之前執行
test
運行測試
posttest
在運行 npm test之后執行
prestop
在運行 npm stop之前執行
stop
停止服務
poststop
在運行 npm stop之后執行
prestart
在運行 npm start之前執行
start
啟動服務
poststart
在運行 npm start之后執行
prerestart
在運行 npm restart之前執行
restart
重啟服務
postrestart
在運行 npm restart之后執行
?? 注意:??build不是 npm 的內置生命周期鉤子??,它只是一個普通的自定義腳本名稱,除非你自己定義了它。
二、與 npm run build相關的鉤子
雖然 build本身不是 npm 的生命周期鉤子,但如果你在 package.json的 scripts中按如下方式定義了多個腳本:
{
“scripts”: {
“prebuild”: “echo ‘即將開始構建…’”,
“build”: “webpack --mode production”,
“postbuild”: “echo ‘構建完成!’”
}
}
那么當你運行:npm run build
npm 會 ??自動按順序執行以下腳本??:
1.??prebuild??(如果定義了)→ 在運行 build之前執行
2.??build?? → 你顯式運行的主要構建腳本
3.postbuild??(如果定義了)→ 在運行 build之后執行
三、額外說明
???pre和 post鉤子不僅適用于 build,也適用于其他自定義腳本??,比如 prestart/ start/ poststart,或者 pretest/ test/ posttest等。
???這些鉤子是 npm 的內置功能,不需要安裝任何插件??。