package.json 的 scripts 字段是一组键值对:键是脚本名,值是要执行的 shell 命令。执行 npm run build 就等于在终端里运行对应命令,而 node_modules/.bin 目录会被自动加入 PATH,所以可以直接写 eslint、webpack 这种命令行工具名,不必写完整路径。
npm 还内置了生命周期钩子:pretest 与 posttest 会在 npm test 前后自动执行,自定义脚本同样支持任意命令的前后钩子。配合串联符号一次跑多条命令、cross-env 解决跨平台环境变量设置问题,就能把构建、测试、部署流水线全部收敛进 scripts,不再需要每个人记忆一长串命令。
{
"name": "my-app",
"version": "1.0.0",
"scripts": {
"dev": "nodemon index.js",
"build": "webpack --mode production",
"lint": "eslint src/",
"pretest": "npm run lint",
"test": "jest"
}
}