阅读(940) (9)

npm 运行脚本 run-script

2021-09-06 15:51:23 更新

运行任意包脚本

概要

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/.binPATH提供的脚本中。本地安装的依赖项提供的任何二进制文件都可以在没有node_modules/.bin 前缀的情况下使用。例如,如果你的包中有一个devDependencyon 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 runNODE环境变量设置为执行的node可执行文件npm。此外,如果--scripts-prepend-node-path通过,则将node驻留的目录添加到 PATH. 如果--scripts-prepend-node-path=auto传递(这是npmv3 中的默认值),则仅当nodePATH.

如果你尝试在没有node_modules目录的情况下运行脚本并且它失败了,你将收到 run 警告npm install,以防万一您忘记了。

你可以使用该--silent标志来防止npm ERR!在出错时显示输出。

你可以使用该--if-present标志来避免在脚本未定义时以非零退出代码退出。这使你可以在不中断执行链的情况下运行可能未定义的脚本。

工作区支持

你可以使用workspaceworkspacesconfigs 以便"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 startnpm stopnpm restartnpm test, 并且npm run-script 如果ignore-scripts已设置仍将运行其预期脚本,但它们不会运行任何前置或后置脚本。

script-shell

  • 默认值:POSIX 系统上的“/bin/sh”,Windows 上的“cmd.exe”
  • 类型:nullString

用于脚本的 shell 与npm exec,npm runnpm init <pkg>命令一起运行。