一、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(“…