什么是npm脚本


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/05/04/%E4%BB%80%E4%B9%88%E6%98%AFnpm%E8%84%9A%E6%9C%AC/

摘要

本文主要讲述了:

  1. 什么是 npm 脚本
  2. 如何查看脚本
  3. 如何执行脚本
  4. shell
  5. 脚本执行位置
  6. 如何向脚本传递参数
  7. 脚本退出码
  8. 错误输出抑制参数

正文

什么是 npm 脚本

npm 脚本指的是package.jsonscripts字段里的内容。

如何查看脚本

使用npm run-script命令查看package.json中的所有脚本。

注:npm run-script命令也可以缩写为npm run

1
2
3
#!/usr/bin/env bash

npm run-script

如何执行脚本

npm run-script + 脚本名称 即可执行对应的脚本。

示例:

1
2
3
4
5
6
7
{
"name": "learn_npm",
"version": "1.0.0",
"scripts": {
"dev": "node index.js"
}
}
1
2
3
#!/usr/bin/env bash

npm run-script dev

shell

不同系统默认使用不同的 shell 执行 npm 脚本。

  • Windows 系统使用cmd.exe执行 npm 脚本
  • 类 Unix 系统使用/bin/sh执行 npm 脚本

示例:将 Windows 系统下 npm 脚本的默认 shell 修改为bash

1
npm config set script-shell C:\Windows\System32\bash.exe

示例:将 Windows 系统下 npm 脚本的默认 shell 修改为powershell

1
npm config set script-shell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

示例:恢复默认设置

1
npm config delete script-shell

注意:也可以通过手动修改.npmrc配置来指定 script-shell

示例:

~/.npmrc(单用户配置文件)

1
script-shell=C:\Windows\System32\bash.exe

脚本执行位置

无论 CWD 是哪一个子目录,脚本始终在项目根目录执行。

示例:

1
2
3
4
5
6
7
{
"name": "learn_npm",
"version": "1.0.0",
"scripts": {
"dir": "ls"
}
}
1
2
3
4
#!/usr/bin/env bash

mkdir learn_npm/src && cd learn_npm/src
npm run-script dir

虽然 CWD 为learn_npm/src/,但dir脚本输出的文件目录还是learn_npm/

如何向脚本传递参数

可以通过--直接传递参数给脚本。

示例:向dir脚本传递-lha参数。

1
2
3
4
5
6
7
{
"name": "learn_npm",
"version": "1.0.0",
"scripts": {
"dir": "ls"
}
}

运行:

1
2
3
#!/usr/bin/env bash

npm run-script dir -- -lha

相当于:

1
2
3
#!/usr/bin/env bash

ls -lha

注意:参数只传递给脚本本身,不传递给带prepost前缀的同名脚本。

脚本退出码

当脚本的退出码为非 0 时,npm 会发出警告,表示脚本执行发生错误

示例:

1
2
3
4
5
6
7
{
"name": "learn_npm",
"version": "1.0.0",
"scripts": {
"dev": "exit 1"
}
}

运行下面的命令会中止程序并输出错误

1
2
3
#!/usr/bin/env bash

npm run-script dev

错误输出抑制参数

--silent可以抑制输出错误信息。

示例:

假设存在 1 个名为learn_npm的项目。

1
2
3
4
5
6
7
{
"name": "learn_npm",
"version": "1.0.0",
"scripts": {
"dev": "exit 1"
}
}

运行下面的命令会中止程序并输出错误

1
2
3
#!/usr/bin/env bash

npm run-script dev --silent

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/05/04/%E4%BB%80%E4%B9%88%E6%98%AFnpm%E8%84%9A%E6%9C%AC/


本文对你有帮助?请支持我


支付宝
微信