npm script 生命周期有哪些?
在 npm 中,scripts 部分允许你定义和运行自定义的脚本命令。npm 脚本有一个生命周期的概念,其中包括一系列的预定义和自定义的生命周期钩子。生命周期钩子的执行顺序和作用如下:
1. 生命周期钩子概述
在 npm 中,生命周期钩子是一些特定的脚本命令,npm 会在特定的时间点自动运行这些命令。例如,安装包之前、之后或者在发布时。
2. 生命周期钩子的具体阶段
prepublish- 触发时间:在
npm publish和npm install时。 - 作用:用于在包发布之前进行准备工作(如构建、测试等)。
- 说明:
prepublish在npm install和npm publish之前执行。
- 触发时间:在
prepare- 触发时间:在
npm install和npm publish时。 - 作用:用于构建、准备包的内容等(如运行编译、构建脚本)。这个阶段在
prepublish之后执行。 - 说明:
prepare主要用于在本地开发和发布之前执行准备工作。
- 触发时间:在
prepublishOnly- 触发时间:在
npm publish时。 - 作用:仅在发布包时执行。不会在
npm install时触发。 - 说明:这个钩子在
npm publish时执行,但在npm install时不会触发。
- 触发时间:在
postpublish- 触发时间:在
npm publish后。 - 作用:用于在包发布之后进行清理或其他操作(如发送通知)。
- 说明:
postpublish在包发布之后执行。
- 触发时间:在
preinstall- 触发时间:在包的安装之前。
- 作用:用于在包安装之前执行任何必要的操作(如设置环境)。
- 说明:
preinstall在运行npm install之前执行。
install- 触发时间:在包的安装过程中。
- 作用:用于在包安装过程中执行自定义操作。
- 说明:
install在preinstall之后执行。
postinstall- 触发时间:在包安装之后。
- 作用:用于在包安装后执行清理、构建或其他操作(如启动本地服务器)。
- 说明:
postinstall在install之后执行。
preuninstall- 触发时间:在包卸载之前。
- 作用:用于在包卸载之前执行任何必要的操作(如清理)。
- 说明:
preuninstall在包卸载之前执行。
uninstall- 触发时间:在包卸载过程中。
- 作用:用于在包卸载过程中执行自定义操作。
- 说明:
uninstall在preuninstall之后执行。
postuninstall- 触发时间:在包卸载之后。
- 作用:用于在包卸载之后执行清理或其他操作。
- 说明:
postuninstall在包卸载之后执行。
3. 脚本执行顺序
当执行 npm install 或 npm publish 时,npm 会按照以下顺序运行这些脚本:
preinstallinstallpostinstallprepublish(在npm publish时)preparepublish(在npm publish时)postpublish
当卸载包时,执行顺序为:
preuninstalluninstallpostuninstall
4. 使用脚本
在 package.json 中定义的自定义脚本与生命周期钩子无关,但可以与这些钩子一起使用。例如:
json
{
"scripts": {
"build": "webpack",
"test": "jest",
"prepublishOnly": "npm run build",
"postinstall": "npm run test"
}
}在这个例子中:
prepublishOnly钩子在发布前运行npm run build。postinstall钩子在安装后运行npm run test。
通过合理利用生命周期钩子,可以在不同阶段自动执行必要的操作,确保项目的一致性和可靠性。