全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 13 道配套习题

包生命周期与钩子机制专题

专题说明

本专题深入解析NPM包从安装到发布的完整生命周期,聚焦prepare和prepublishOnly等关键钩子的执行时机、触发条件与实战应用场景。

学习目标

  1. 理解从安装到发布的完整生命周期钩子执行顺序
  2. 掌握prepare钩子在安装和发布前的执行时机与用途
  3. 学会使用prepublishOnly在发布前执行测试与构建

学习内容

  • 完整生命周期:各阶段钩子执行顺序与触发条件
  • prepare钩子:git依赖安装、发布前构建
  • prepublishOnly钩子:发布前测试、构建验证

学习建议

  1. prepare钩子在npm installnpm publish时都会触发
  2. prepublishOnly仅在npm publish时触发,适合最终验证
  3. 理解生命周期顺序有助于编排复杂的构建流程

📝 配套习题(13 题)

💡 参考答案在文末
判断题
1

prepublishOnly钩子只在npm publish时执行,不会在npm install时触发。

A

B

2

npm的生命周期钩子遵循"pre-动作-post"的模式,当执行npm run build时,npm会依次执行prebuild、build、postbuild三个脚本,即使prebuild脚本执行失败,build脚本仍会继续执行。

A

B

3

当通过npm install git+https://github.com/user/repo.git安装一个git仓库作为依赖时,npm会在克隆仓库后自动执行该仓库的prepare钩子脚本,用于构建编译后的文件。

A

B

4

prepare钩子会在npm install(不带参数)和npm publish之前自动执行,常用于编译TypeScript等构建步骤。

A

B

单选题
5

以下哪个场景会触发prepare钩子但不会触发prepublishOnly钩子?

A

npm publish

B

npm install(安装Git仓库依赖)

C

npm pack

D

npm ci

6

prepublishOnly钩子的典型使用场景是?

A

编译TypeScript源码

B

运行测试确保代码质量

C

清理临时文件

D

发送发布通知邮件

多选题
7

关于npm的prepare钩子,以下哪些说法是正确的?

A

prepare在npm install安装Git依赖时会执行

B

prepare不应包含耗时操作,会影响安装速度

C

prepare在npm publish之前执行

D

prepare可以替代prepublishOnly的所有功能

8

关于npm生命周期钩子,以下哪些说法是正确的?

A

npm install(不带参数)会触发preinstall、install、postinstall和prepare钩子

B

npm ci会触发preinstall、install和postinstall钩子,但不触发prepare

C

prepublish钩子在npm v7+中已被完全移除

D

npm publish时会依次执行prepublishOnly、prepack、prepare、publish、postpublish

E

当package.json中存在install钩子时,如果node_modules中已存在该包,install钩子仍会执行

F

生命周期脚本中的this.inventory在npm v7+中已被移除

9

关于prepublishOnly与prepublish钩子的区别,以下哪些说法正确?

A

prepublishOnly只在npm publish时触发

B

prepublish在npm install时也会触发

C

prepublishOnly是prepublish的推荐替代方案

D

两个钩子的执行时机完全相同

填空题
10

npm install(不带参数)触发的生命周期钩子按执行顺序为:____________________________________、prepare。在生命周期脚本执行时,可以通过环境变量npm_config_ci判断当前是开发安装还是CI环境安装。npm publish时,在prepack和publish之间还会执行prepare钩子。

11

prepublishOnly钩子是在npm ____________版本中引入的,用于替代已废弃的____________钩子。后者因在____________时也会触发而引发混淆,导致开发者无意中在安装依赖时执行了本应只在发布前运行的构建脚本。

12

在npm publish时,钩子的执行顺序是:____________ → prepare → prepack → pack → ____________ → publish → postpublish

13

prepublish钩子因在____________时也会触发而被废弃,推荐使用____________替代,它只在npm publish时执行。

参考答案
1.正确 2.错误 3.正确 4.正确 5.B 6.B 7.A;B;C 8.A;B;D;F 9.A;B;C 10.preinstall;install;postinstall 11.v4;prepublish;npm install 12.prepublishOnly;postpack 13.npm install;prepublishOnly
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 包开发与发布进阶专题
下一个专题 → 包的查找与安装专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码