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 后指定的脚本,而不会传递给任何 prepost 脚本。

env 脚本是一个特殊的内置命令,可用于列出运行时脚本可用的环境变量。如果你的包中定义了 “env” 命令,它将优先于内置命令。

除了 shell 现有的 PATH 之外,npm run 会将 node_modules/.bin 添加到提供给脚本的 PATH 中。本地安装的依赖项提供的任何二进制文件都可以在没有 node_modules/.bin 前缀的情况下使用。例如,如果你的包中对 tapdevDependency,你应该编写

"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 runNODE 环境变量设置为执行 npmnode 可执行文件。

如果你尝试运行脚本但没有 node_modules 目录并且它失败,你将收到一条警告,要求你运行 npm install,以防你忘记了。

工作区支持

你可以使用 workspaceworkspaces 配置,以便在指定工作区的上下文中从包的 "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.jsonscripts 部分中未定义的脚本调用 run-script 时,npm 不会退出并显示错误代码。当需要在脚本存在时可选地运行脚本,并在脚本失败时失败时,可以使用此选项。例如,在运行仅适用于某些构建的脚本(但在其他通用 CI 设置中适用)时,这很有用。

此值不会导出到子进程的环境中。

ignore-scripts

  • 默认值:false
  • 类型:布尔值

如果为 true,npm 不会运行 package.json 文件中指定的脚本。

请注意,明确用于运行特定脚本的命令,例如 npm startnpm stopnpm restartnpm testnpm run-script 仍然会运行其预期的脚本,即使设置了 ignore-scripts,但它们不会运行任何预脚本或后脚本。

foreground-scripts

  • 默认值:false,除非使用 npm packnpm publish,在这种情况下默认为 true
  • 类型:布尔值

在前景进程中运行所有构建脚本(即 preinstallinstallpostinstall)脚本,并与主 npm 进程共享标准输入、输出和错误。

请注意,这通常会使安装运行速度变慢,并且会产生更多噪音,但对于调试很有用。

script-shell

  • 默认值:在 POSIX 系统上为 '/bin/sh',在 Windows 上为 'cmd.exe'
  • 类型:null 或字符串

用于使用 npm execnpm runnpm init <package-spec> 命令运行的脚本的 shell。

另请参阅