在前端的大家庭当中,有着各种各样的包管理工具,如:npm、yarn、pnpm 等等,使用它们能够很好的管理我们项目中的各种依赖,同时执行
package.json文件中script中执行的运行脚本,当我们使用npm run xxx之类的命令,运行这些定义在script当中的脚本时,它还会自动执行一些生命周期钩子命令。
package.json 文件是我们每个项目当中必须指定的,我们就以下面的 package.json 为例进行测试
{
"name": "test-script",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"pretest": "node test.js",
"posttest": "node test.js",
"test": "node run.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.3"
}
}同时在项目的根目录下新建两个 js 文件,一个是 test.js,一个是 run.js,这两个文件中的内容如下:
// test.js
console.log('this is test.js')// run.js
console.log('this is run.js')到这里我们的项目就搭建完毕了,接下来我们测试一下运行 npm run test 命令,看看会发生什么事情。
$ npm run test可以看到如下的命令行输出:

当我们执行任意 npm run test 脚本时,会自动执行 pre 和 post 生命周期钩子,具体如下:
# 第一步
npm run pretest
# 第二步
npm run test
# 第三步
npm run posttest除了我们自定义的 script 命令之外,npm 等包管理工具也提供了一些内置的 script 命令,如:
npm install
npm test
npm publishnpm publish 的生命周期npm publish 发包的生命周期比较复杂,当执行 npm publish 命令,将自动执行以下脚本:
如果需要在使用 npm publish 发包之前自动做一些事情,如测试、构建等,一般在 prepulishOnly 命令中配置完成,如:
"scripts": {
"prepublishOnly": "npm run test"
}prepare执行时机: