在执行 npm publish 命令时,npm script 各生命周期钩子的执行顺序是怎样的?
考察说明
考查对 npm publish 过程中脚本钩子执行机制的理解,以及发布流程的掌握程度。
回答思路
- 【回答框架 1】npm publish 的核心生命周期顺序为:prepublishOnly 在打包和发布前执行,常用于运行测试、构建等准备工作;随后是 prepack、prepare、postpack 围绕打包过程执行;完成打包后执行 publish 和 postpublish 钩子。
- 【回答框架 2】更精确地说,执行 npm publish 时会依次触发:prepublishOnly、prepack、prepare、postpack、publish、postpublish。其中 prepare 在本地 npm install 时也会执行,因此用于构建步骤时需要谨慎,避免发布时重复执行。
- 【回答框架 3】prepublishOnly 与 prepublish 不同,前者只在 npm publish 时触发,后者已废弃并更名,实际使用中应避免混淆。发布流程中若存在构建步骤,通常放在 prepublishOnly 中。
- 【回答框架 4】此外,若发布过程中执行了 npm pack 或 npm install,会相应触发 prepack、postpack 及 prepare 等钩子。理解顺序后可以通过脚本日志验证实际触发序列。
- 【回答框架 5】对于现代 npm 版本,发布流程还涉及生命周期脚本的完整性,建议在 CI 中显式执行准备步骤,避免依赖钩子顺序带来的不确定性。
- 【关键点 1】npm publish 触发顺序:prepublishOnly → prepack → prepare → postpack → publish → postpublish。
- 【关键点 2】prepublishOnly 仅在发布前触发,适合做检查、测试、构建。
- 【关键点 3】prepare 在 npm install 时也会触发,可能造成重复执行。
- 【关键点 4】prepublish 已废弃,应改用 prepublishOnly。
- 【关键点 5】可通过前置脚本日志验证钩子实际执行顺序。
- 【易错点 1】混淆 prepublish 与 prepublishOnly,导致钩子不生效。
- 【易错点 2】误将构建放在 prepare 中,造成本地安装时每次执行构建。
- 【易错点 3】未考虑 npm pack 或发布流程中触发额外钩子的情况,导致执行顺序意外。