目录
npm-run-script
选择 CLI 版本
目录
概述
npm run-script <command> [-- <args>]aliases: run, rum, urn
描述
这会从包的 "scripts"
对象中运行任意命令。如果没有提供 "command"
,它将列出可用的脚本。
run[-script]
由 test、start、restart 和 stop 命令使用,但也可以直接调用。当包中的脚本被打印出来时,它们被分成生命周期(test、start、restart)和直接运行的脚本。
任何位置参数都将传递给指定的脚本。使用 --
传递 -
- 前缀的标志和选项,否则这些标志和选项将由 npm 解析。
例如
npm run test -- --grep="pattern"
这些参数将仅传递给 npm run
后指定的脚本,而不会传递给任何 pre
或 post
脚本。
env
脚本是一个特殊的内置命令,可用于列出运行时脚本可用的环境变量。如果你的包中定义了 “env” 命令,它将优先于内置命令。
除了 shell 现有的 PATH
之外,npm run
会将 node_modules/.bin
添加到提供给脚本的 PATH
中。本地安装的依赖项提供的任何二进制文件都可以在没有 node_modules/.bin
前缀的情况下使用。例如,如果你的包中对 tap
有 devDependency
,你应该编写
"scripts": {"test": "tap test/*.js"}
而不是
"scripts": {"test": "node_modules/.bin/tap test/*.js"}
你的脚本实际运行的 shell 依赖于平台。默认情况下,在类 Unix 系统上,它是 /bin/sh
命令,在 Windows 上,它是 cmd.exe
。/bin/sh
所引用的实际 shell 也取决于系统。你可以使用 script-shell
配置 自定义 shell。
无论调用 npm run
时当前工作目录是什么,脚本都从包文件夹的根目录运行。如果你希望你的脚本根据你所在的子目录使用不同的行为,你可以使用 INIT_CWD
环境变量,它保存了你运行 npm run
时所在的完整路径。
npm run
将 NODE
环境变量设置为执行 npm
的 node
可执行文件。
如果你尝试运行脚本但没有 node_modules
目录并且它失败,你将收到一条警告,要求你运行 npm install
,以防你忘记了。
工作区支持
你可以使用 workspace
或 workspaces
配置,以便在指定工作区的上下文中从包的 "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 -w a -w b
此最后一个命令将在 ./packages/a
和 ./packages/b
包中都运行 test
。
配置
workspace
- 默认
- 类型:字符串(可以多次设置)
启用在当前项目的配置工作区的上下文中运行命令,同时通过仅运行此配置选项定义的工作区来过滤。
对 workspace
配置有效的配置选项是
- 工作区名称
- 工作区目录的路径
- 指向父工作区目录的路径(将选择该文件夹中的所有工作区)。
当为 npm init
命令设置时,可以将其设置为尚未存在的工作区文件夹,以创建该文件夹并将其设置为项目内的全新工作区。
此值不会导出到子进程的环境中。
workspaces
- 默认值:null
- 类型:null 或布尔值
设置为 true,以便在所有配置的工作区的上下文中运行命令。
将此显式设置为 false 将导致 install
等命令完全忽略工作区。如果未显式设置
- 对
node_modules
树进行操作的命令(install、update 等)将工作区链接到node_modules
文件夹中。 - 其他操作的命令(test、exec、publish 等)将在根项目上运行,除非 在workspace
配置中指定了一个或多个工作区。
此值不会导出到子进程的环境中。
include-workspace-root
- 默认值:false
- 类型:布尔值
在为命令启用工作区时,包含工作区根目录。
当为 false 时,通过 workspace
配置指定单个工作区,或通过 workspaces
标志指定所有工作区,将导致 npm 仅在指定的工作区上运行,而不是在根项目上运行。
此值不会导出到子进程的环境中。
if-present
- 默认值:false
- 类型:布尔值
如果为 true,当为 package.json
的 scripts
部分中未定义的脚本调用 run-script
时,npm 不会退出并显示错误代码。当需要在脚本存在时可选地运行脚本,并在脚本失败时失败时,可以使用此选项。例如,在运行仅适用于某些构建的脚本(但在其他通用 CI 设置中适用)时,这很有用。
此值不会导出到子进程的环境中。
ignore-scripts
- 默认值:false
- 类型:布尔值
如果为 true,npm 不会运行 package.json
文件中指定的脚本。
请注意,明确用于运行特定脚本的命令,例如 npm start
、npm stop
、npm restart
、npm test
和 npm run-script
仍然会运行其预期的脚本,即使设置了 ignore-scripts
,但它们不会运行任何预脚本或后脚本。
foreground-scripts
- 默认值:
false
,除非使用npm pack
或npm publish
,在这种情况下默认为true
- 类型:布尔值
在前景进程中运行所有构建脚本(即 preinstall
、install
和 postinstall
)脚本,并与主 npm 进程共享标准输入、输出和错误。
请注意,这通常会使安装运行速度变慢,并且会产生更多噪音,但对于调试很有用。
script-shell
- 默认值:在 POSIX 系统上为 '/bin/sh',在 Windows 上为 'cmd.exe'
- 类型:null 或字符串
用于使用 npm exec
、npm run
和 npm init <package-spec>
命令运行的脚本的 shell。