關于npm的鉤子函數

一、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 的內置功能,不需要安裝任何插件??。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921603.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921603.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921603.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

167.在Vue3中使用OpenLayers模仿共享單車,判斷點是否放在規劃的電子圍欄內

一、前言大家好,這里分享一個 Vue3 OpenLayers 的小案例: 模仿共享單車的電子圍欄功能,用戶在地圖上繪制停泊點時,系統會自動判斷該點是否在規劃好的電子圍欄內(多邊形或圓形)。這個功能在實際項目中有很大…

鍵盤上面有F3,四,R,F,V,按下沒有反應,維修記錄

打開游戲,按了好幾遍F,結果都沒反應,但是左右上下行走是沒問題的。一臉懵逼???打開鍵盤測試網頁,發現有一列沒反應,F1不是,F1我定義了一個快捷鍵,跟測試沖突了…

8051單片機-成為點燈大師

第三章 成為點燈大師 1. 硬件設計 上一章說到,怎么點亮LED燈,很簡單啊,就是把P2口設置成低電平就行了。接下來讓我們更進一步,完成LED閃爍、流水燈實驗2. 軟件設計 2.1 LED閃爍實驗 為了使LED閃爍,我們自然而然的想到要…

Rust 日志庫完全指南:從入門到精通

GitHub 倉庫: https://github.com/zhouByte-hub/rust-study ? 如果這個項目對您有幫助,請給我一個 star! 在 Rust 生態系統中,日志處理是一個至關重要的環節。無論是開發小型應用還是大型系統,良好的日志記錄都能幫助我們追蹤問題…

【科研繪圖系列】R語言繪制論文合集圖

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 數據準備與過濾 統計分析 可視化繪圖 抗藥性分析 系統發育分析 加載R包 數據下載 Supp figure 1 Fig 1a Fig 1c Fig 1d Fig 1e Fig 1f Supp figure 3 Supp figure 4 Supp figure 5…

【c++】從三個類的設計看軟件架構的哲學思考

從三個類的設計看軟件架構的哲學思考 文章目錄從三個類的設計看軟件架構的哲學思考前言一、OP類:系統工程的安全守護者設計特點設計哲學適用場景現實類比二、VarReviser類:版本控制的嚴謹管理者設計特點設計哲學適用場景現實類比三、Model類:…

人工智能優化SEO關鍵詞的實戰策略

本文聚焦智能技術如何革新關鍵詞優化實踐,系統解析提升網站排名的核心路徑。重點探討語義分析如何精準匹配用戶意圖、長尾詞智能挖掘怎樣解鎖高潛力流量,并詳解工具篩選高轉化關鍵詞的五大實用策略。通過實戰案例說明技術如何突破流量增長瓶頸&#xff0…

【c++】c++第一課:命名空間

文章目錄1.C的第?個程序2.命名空間2.1 namespace的價值2.2 namespace的定義2.3 命名空間使?最新的c標準(建議收藏) 1.C的第?個程序 C兼容C語?絕?多數的語法,所以C語?實現的helloworld依舊可以運?,C中需要把定義?件代碼后…

版本發布流程手冊:Release分支規范與Bug分級標準全解析

在軟件交付日益高頻、用戶需求快速迭代的今天,版本發布流程的規范性直接決定了團隊的交付效率、產品質量和用戶滿意度。然而,許多團隊仍面臨以下痛點: 發布混亂:分支管理隨意,代碼沖突頻發;質量失控&#…

什么是CA根證書

CA 根證書(Certificate Authority Root Certificate)是 數字證書體系(PKI,Public Key Infrastructure) 中的核心證書。它有幾個關鍵點:1. 定義 CA(Certificate Authority)&#xff1…

git push -u origin main 這個-u起什么作用

git push -u origin main 里的 -u 等價于 --set-upstream,它的作用是:👉 把本地分支 main 和遠程分支 origin/main 綁定(建立追蹤關系)。🔹 具體效果第一次推送分支時,如果加了 -u:本…

【Unity基礎】兩個關于UGUI中Text對非英文字體支持的問題

問題1:Unity中為什么UGUI中的Text(Textmeshpro)默認不支持非英文字體,而legacy中的text卻可以呢? 在Unity中,TextMeshPro(TMP)默認不支持非英文字體,而Legacy Text支持,主…

碎片時間干活的好手(requestIdleCallback)

🟢 What —— 它是什么? requestIdleCallback(callback[, options]) 是瀏覽器提供的一個 API,用來在主線程空閑時執行一些優先級不高的任務。 它的特點: 異步執行:不會打斷關鍵的渲染、交互、動畫。節省性能&#xff1…

第三方網站測評:【WEB應用文件包含漏洞(LFI/RFI)的測試步驟】

文件包含漏洞分為本地文件包含(LFI)和遠程文件包含(RFI)兩類。LFI允許讀取服務器本地文件,RFI可執行遠程服務器上的惡意代碼。PHP應用中include()、require()等函數未正確過濾用戶輸入時易產生此類漏洞。 檢測URL中可能包含文件的參數,常見特征如下: 參數名包含file、pa…

網絡爬蟲(web crawler)

文章目錄一、什么是網絡爬蟲二、爬蟲工作流程詳解第1步:起始點 - URL種子庫(Seed URLs)第2步:大腦 - 調度器(Scheduler)第3步:雙手 - 網頁下載器(Downloader)第4步&#…

redis的高可用(哨兵)

Redis 的主從復制模式下,一旦主節點由于故障不能提供服務,需要人工進行主從切換,同時大量的客戶端需要被通知切換到新的主節點上,對于上了一定規模的應用來說,這種方案是無法接受的,于是Redis從2.8開始提供…

安徽某能源企業積極推進運維智能化轉型,引入高壓配電房機器人巡檢系統

在工業自動化與智能化深度融合的當下,機器人技術已成為能源行業提質增效的關鍵支撐。特別是在配電房這類高壓電力核心區域的運維工作中,傳統人工巡檢不僅面臨效率低下、巡檢周期長的困境,更因人員直接接觸高壓設備而存在極高的安全風險。此&a…

數據結構_二叉平衡樹

#include <stdio.h> #include <stdlib.h> #define max(a,b) ((a > b)? (a):(b))//平衡二叉樹的節點結構 typedef struct AVL_TreeNode{int data; //數據域struct AVL_TreeNode* l;struct AVL_TreeNode* r;int h;//記錄樹的高度&#xff0c;用于計算平衡因子 }…

掃描件、PDF、圖片都能比對!讓文檔差異無所遁形

智能文檔比對系統可精準識別文檔差異&#xff0c;解決金融、法律等多方協作場景下的版本混亂、審核低效和合規風險問題&#xff0c;將一份百頁文檔的人工核對從數小時縮短至3分鐘以內。 文檔差異比對常見場景有哪些&#xff1f; 每一次文檔的修改都可能帶來潛在風險&#xff0c…

excel里面店鋪這一列的數據結構是2C【uniteasone17】這種,我想只保留前面的2C部分,后面的【uniteasone17】不要

這個結構是&#xff1a; 2C【uniteasone17】只要取前面的 2C 部分&#xff0c;可以用 Excel 的 公式 或者 文本函數 來實現。 方法 1&#xff1a;使用公式提取 假設店鋪數據在 A2 單元格&#xff1a; LEFT(A2,FIND("【",A2)-1)&#x1f449; 解釋&#xff1a; FIND(“…