pnpm run
别名: run-script
运行一个在 package
的 manifest 文件中定义的脚本。
示例
假如您有个 watch
脚本配置在了package.json
中,像这样:
"scripts": {
"watch": "build-command --watch"
}
您现在可以使用 pnpm run watch
运行该脚本! 很简单吧? 对于那些不喜欢敲键盘而浪费时间的人要注意的另一件事是,所有脚本都会有 pnpm 命令的别名,所以最终 pnpm run watch
的简写是 pnpm watch
(仅适用于那些不与已有的pnpm 命令相同名字的脚本)。
详细
In addition to the shell’s pre-existing PATH
, pnpm run
includes node_modules/.bin
in the PATH
provided to scripts
. This means that so long as you have a package installed, you can use it in a script like a regular command. For example, if you have eslint
installed, you can write up a script like so:
"lint": "eslint src --fix"
And even though eslint
is not installed globally in your shell, it will run.
对于工作空间,截至 v3.5 , <workspace root>/node_modules/.bin
也将添加到PATH
中,因此如果在工作空间根目录中安装了一个工具,则可以在工作空间的任何package
的 scripts
中使用。
Differences with npm run
By default, pnpm doesn’t run arbitrary pre
and post
hooks for user-defined scripts (such as prestart
). This behavior, inherited from npm, caused scripts to be implicit rather than explicit, obfuscating the execution flow. It also led to surprising executions with pnpm serve
also running pnpm preserve
.
If for some reason you need the pre/post scripts behavior of npm, use the enable-pre-post-scripts
option.
配置项
script-shell
添加于:v5.10.0
- 默认值: null
- 类型:path
设置执行 pnpm run
命令脚本的 shell。
例如,要强制在 Windows 上使用 Git Bash:
pnpm 配置中设置 script-shell "C:\\Program Files\\git\\bin\\bash.exe"
shell-emulator
添加于:v5.8.0
- 默认值: false
- 类型:Boolean
当置为 true
,pnpm 将使用 bash-like shell 这个JavaScript 实现的执行器来运行脚本。
此选项简化了跨平台脚本。 例如,默认情况下,下面的脚本将在非 POSIX 兼容系统上失败:
"scripts": {
"test": "NODE_ENV=test node test.js"
}
但是,如果 shell-emulator
设置为 true
,它将适用于所有平台。
--recursive, -r
这会从每一个 package
的“ scripts”对象中执行任意一个命令。 如果一个 package
没有该命令,就会被跳过。 如果所有 package
都没有这个命令,则会执行失败。
--if-present
添加于:v4.5.0
如果脚本未定义,那么您可以使用 --if-present
标志以避免遇到用非零的退出代码从而导致退出。 这使您可以在不中断执行链的情况下运行可能未定义的脚本。
--parallel
添加于:v5.1.0
完全忽略并发和拓扑排序,在所有匹配的包中立即运行给定的脚本 并输出前缀流。 这是个推荐的标志,用于在许多 packages
上长时间运行的进程,例如冗长的构建进程。
--stream
添加于:v5.1.0
以起始package
目录作为前缀,立即从子进程输出流。 这允许从不同的 package
交替输出。
--aggregate-output
添加于:v6.24.0
聚合并行运行的子进程的输出,并且仅在子进程完成时打印输出。 它使在运行 pnpm -r <command>
时使用 --parallel
或 --workspace-concurrency=<number>
后读取大日志更容易(尤其是在 CI 上)。 仅支持 --reporter=append-only
。
enable-pre-post-scripts
添加于:v6.1.0
- 这允许从不同的
package
交替输出。 - 类型:Boolean
当置为 true
,pnpm 将自动运行任何前置/后置钩子脚本。 所以运行 pnpm foo
,就相当于运行 pnpm prefoo && pnpm foo && pnpm postfoo
。