我们可以通过 npm start 执行package.json 文件中scripts字段定义的start 命令, 但是我们执行 npm build 却发现报错了(package.json 中已定义build命令) 。 如果我们执行 yarn build又可以执行到package.json 中scripts定义的 build 命令。 但是我们如果运行 yarn update 发现没有执行到package.json 中定义的 update 命令, 这是为什么呢? 下面我们一起来研究研究。
npm run <script_name>
npm run <script_name> 执行 package.json 文件中 scripts 定义的命, 比如
// package.json
{
"scripts": {
"start": "echo \">>>>start\""
}
}
// 命令终端运行一下命令,就会执行scripts 中的 start 命令
npm run start // >>>>start
npm run 简写
npm run <script_name> , 如果 script_name 为 start 、stop 、test、restart 这几个命令, 可以支持简写,省略 run
npm run start
npm start # 简写
npm run stop
npm stop # 简写
npm run test
npm test # 简写
npm run restart
npm restart # 简写
npm run build
npm build # 错误, 不能简写, 这里是执行npm 内置命令 build,因为npm没有build的内置命令所以报错
注意: 只有上面列出的几个命令支持简写, 其他的自定义script命令不支持。
有点窍门的 restart
运行 npm restart 或者 npm run restart , 如果 package.json 文件中 scripts 定义了 restart 命令, 则运行对应的restart 命令, 如果package.json 文件中 没有定义 restart,那么执行步骤:
- 运行
npm stop(package.json 文件中没定义则跳过) - 运行
npm start(package.json 文件中没定义start 报错)
yarn run <script_name>
yarn run <script_name> 执行 package.json 文件中 scripts 定义的命, 和 npm run <script_name> 都是干的同一个事情, 但是在简写规则上有些不同。
yarn run 简写
pakcage.json 文件中 scripts字段定义的所有命令都可以简写,但是不能和yarn 本身内置的命令重名。
yarn run start
yarn start # 简写
yarn run build
yarn build # 简写
yarn run upgrade
yarn upgrade # 错误,不能简写, 因为 upgrade 是yarn内部命令, 这里执行的是yarn 内部命令, 不是scripts 对应的 upgrade 命令
如何查看 yarn 内置了哪些命令 yarn --help
pnpm run
pnpm run <script_name> 执行 package.json 文件中 scripts 定义的命, 和 npm run <script_name> 也是干的同一个事情,简写规则上和yarn差不多, restart 命令的执行上和npm有点类似。
pnpm run 简写
pakcage.json 文件中 scripts字段定义的所有命令都可以简写,但是不能和pnpm 本身内置的命令重名。
pnpm run start
pnpm start # 简写
pnpm run build
pnpm build # 简写
pnpm run update
pnpm update # 错误,不能简写, 因为 update 是pnpm内部命令, 这里执行的是pnpm 内部命令, 不是scripts 对应的 update 命令
有点窍门的 restart
pnpm run restart , 如果 package.json 文件中 scripts 定义了 restart 命令, 则运行对应的restart 命令,
pnpm restart 执行步骤
- 运行
pnpm run stop(package.json 文件的 scripts中没定义 stop 报错) - 运行
pnpm run restart(package.json 文件的 scripts中没定义 restart 报错) - 运行
pnpm run start(package.json 文件的 scripts中没定义 start, 会执行默认的start: node server.js)