npm 运行脚本 run-script
运行任意包脚本
概要
npm run-script <command> [--silent] [-- <args>...]
alias: npm run
描述
这会从包的"scripts"
对象运行任意命令。如果没有 "command"
提供,它将列出可用的脚本。 run[-script]
由 test、start、restart 和 stop 命令使用,但也可以直接调用。当包中的脚本打印出来时,它们被分成生命周期(测试、启动、重启)和直接运行的脚本。
从 开始npm@2.0.0
,你可以在执行脚本时使用自定义参数。getopt--
使用 特殊选项来分隔选项的结尾。npm 会将 之后的所有参数直接传递给你的脚本:--
npm run test -- --grep="pattern"
参数只会传递给之后指定的脚本npm run
,不会传递给任何前脚本或后脚本。
该env
脚本是一个特殊的内置命令,可用于列出脚本在运行时可用的环境变量。如果包中定义了“env”命令,它将优先于内置命令。
除了 shell 预先存在的PATH
,npm run
添加 node_modules/.bin
到PATH
提供的脚本中。本地安装的依赖项提供的任何二进制文件都可以在没有node_modules/.bin
前缀的情况下使用。例如,如果你的包中有一个devDependency
on tap
,你应该写:
"scripts": {"test": "tap test/\*.js"}
代替
"scripts": {"test": "node_modules/.bin/tap test/\*.js"}
运行你的测试。
你的脚本在其中运行的实际 shell 取决于平台。默认情况下,在类 Unix 系统上它是/bin/sh
命令,在 Windows 上它是cmd.exe
. 所指的实际外壳/bin/sh
也取决于系统。由于npm@5.1.0
可以自定义与外壳script-shell
配置。
脚本从模块的根目录运行,无论您在调用npm run
. 如果你希望脚本根据你所在的子目录使用不同的行为,你可以使用 INIT_CWD
环境变量,它保存你运行npm run
.
npm run
将NODE
环境变量设置为执行的node
可执行文件npm
。此外,如果--scripts-prepend-node-path
通过,则将node
驻留的目录添加到 PATH
. 如果--scripts-prepend-node-path=auto
传递(这是npm
v3 中的默认值),则仅当node
在PATH
.
如果你尝试在没有node_modules
目录的情况下运行脚本并且它失败了,你将收到 run 警告npm install
,以防万一您忘记了。
你可以使用该--silent
标志来防止npm ERR!
在出错时显示输出。
你可以使用该--if-present
标志来避免在脚本未定义时以非零退出代码退出。这使你可以在不中断执行链的情况下运行可能未定义的脚本。
工作区支持
你可以使用workspace
或workspaces
configs 以便"scripts"
在指定工作区的上下文中从包的对象运行任意命令。如果没有"command"
提供,它将列出每个配置的工作区的可用脚本。
给定一个配置了工作区的项目,例如:
.
+-- package.json
`-- packages
+-- a
| `-- package.json
+-- b
| `-- package.json
`-- c
`-- package.json
假设在根级别package.json
文件中正确设置了工作区配置 。例如:
{
"workspaces": [ "./packages/*" ]
}
并且每个配置的工作区都有一个配置的test
脚本,我们可以使用workspaces
配置在所有工作区中运行测试:
npm test --workspaces
过滤工作区
还可以使用workspace
配置以及名称或目录路径在单个工作区中运行脚本:
npm test --workspace=a
该workspace
配置还可以以运行在多个工作区的背景下,特定的脚本中指定多次。workspace
在命令行中为配置定义值时,也可以-w
用作简写,例如:
npm test -wa -wb
最后一条命令将test
在./packages/a
和./packages/b
包中运行。
配置
workspace 工作区
- 默认:
- 类型:
String
(可多次设置)
允许在当前项目的已配置工作区的上下文中运行命令,同时通过仅运行此配置选项定义的工作区进行过滤。
workspace
配置的有效值为:
- 工作区名称
- 工作区目录的路径
- 父工作区目录的路径(将导致选择所有嵌套工作区)
为该npm init
命令设置时,可以将其设置为尚不存在的工作区的文件夹,以创建该文件夹并将其设置为项目中的全新工作区。
此值不会导出到子进程的环境中。
workspaces 工作区
- 默认值:
false
- 类型:
Boolean
启用在所有已配置工作区的上下文中运行命令。
此值不会导出到子进程的环境中。
if-present 如果存在
- 默认值:
false
- 类型:
Boolean
如果为真,NPM不会有错误代码时退出run-script
被调用未在定义脚本scripts
的部分package.json
。当需要有选择地运行存在的脚本并在脚本失败时失败时,可以使用此选项。这很有用,例如,在运行可能仅适用于其他通用 CI 设置中的某些构建的脚本时。
ignore-scripts 忽略脚本
- 默认值:
false
- 类型:
Boolean
如果为 true
,则 npm 不会运行 package.json
文件中指定的脚本。
请注意,明确用于运行特定脚本的命令,例如 npm start
, npm stop
, npm restart
, npm test
, 并且npm run-script
如果ignore-scripts
已设置仍将运行其预期脚本,但它们不会运行任何前置或后置脚本。
script-shell
- 默认值:POSIX 系统上的“/bin/sh”,Windows 上的“cmd.exe”
- 类型:
null
或String
用于脚本的 shell 与npm exec
,npm run
和npm init <pkg>
命令一起运行。