全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-25 7 分钟 ✍️ juanwangdev

npm生命周期钩子详解

npm在执行脚本时自动运行pre和post钩子,无需手动编排,实现构建流程自动化。

生命周期钩子

pre与post钩子

为任意自定义脚本添加pre/post前缀即可定义钩子:

JSON
{
  "scripts": {
    "prebuild": "echo '清理旧产物...' && rm -rf dist",
    "build": "tsc",
    "postbuild": "echo '构建完成'"
  }
}

执行npm run build时,实际执行顺序为:prebuild → build → postbuild。

钩子执行规则

  • pre钩子失败则主脚本不执行
  • 主脚本失败则post钩子不执行
  • 钩子脚本本身也是普通shell命令
  • 可链式使用:prebuild → build → postbuild → postpostbuild
JSON
{
  "scripts": {
    "pretest": "npm run lint",
    "test": "jest",
    "posttest": "npm run coverage"
  }
}

钩子失败会中断后续脚本。如果prebuild返回非零退出码,build不会执行。

内置生命周期事件

install相关

钩子触发时机
preinstallnpm install之前
install安装时
postinstallnpm install之后
prepareinstall后/publish前
JSON
{
  "scripts": {
    "postinstall": "node scripts/setup.js",
    "prepare": "husky install"
  }
}

publish相关

钩子触发时机
prepublishOnly仅publish前执行
prepacknpm pack前
postpacknpm pack后
prepackpublish前打包
JSON
{
  "scripts": {
    "prepublishOnly": "npm test && npm run lint",
    "prepack": "npm run build"
  }
}

start与restart

钩子触发时机
prestartnpm start前
start启动应用
poststartnpm start后
prerestartnpm restart前

prepare是最常用的内置钩子,husky等工具依赖它在install后初始化Git钩子。prepublishOnly比已废弃的prepublish更安全,仅在publish时触发。

要点总结

  • pre/post钩子自动在主脚本前后执行,无需手动调用
  • 钩子失败会中断后续脚本链
  • postinstall和prepare是最常用的内置钩子
  • prepublishOnly仅在npm publish时触发,避免误执行
  • 内置生命周期事件覆盖install、publish、start等核心操作
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 npm ci与overrides覆盖
下一篇 → 脚本执行与跨平台兼容
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码