pnpm run
별칭: run-script
패키지의 매니페스트 파일에 정의된 스크립트를 실행합니다.
예시
다음과 같이 package.json
에 구성된 watch
스크립트가 있다고 가정해 보겠습니다.
"scripts": {
"watch": "webpack --watch"
}
이제 pnpm run watch
을 사용하여 해당 스크립트를 실행할 수 있습니다! 간단하지요? 키 입력과 시간을 절약하는 것을 좋아하는 사람들을 위해 주목해야 할 또 다른 사항은 모든 스크립트가 pnpm 명령으로 앨리어싱된다는 것입니다. 따라서 궁극적으로 pnpm watch
는 pnpm run watch
의 축약형입니다 (이미 존재하는 pnpm 명령과 동일한 이름을 공유하지 않는 스크립트에만 해당함).
Running multiple scripts
Added in: v7.27.0
스크립트의 이름 대신 정규식을 사용하여 동시에 여러 스크립트를 실행할 수 있습니다.
pnpm run "/<regex>/"
다음과 같이 watch:
로 시작하는 모든 스크립트를 실행할 수 있습니다.
pnpm run "/^watch:.*/"
Details
셸의 기존 PATH
에 더하여, pnpm run
은 scripts
에 제공된 PATH
에 node_modules/.bin
을 포함합니다. 즉, 패키지가 설치되어 있는 한 일반 명령어처럼 스크립트에서 사용할 수 있습니다. 예를 들어, eslint
가 설치되어 있는 경우, 다음과 같이 스크립트 를 작성할 수 있습니다.
"lint": "eslint src --fix"
그리고 eslint
가 셸에 전역적으로 설치되어 있지 않아도 실행됩니다.
워크스페이스의 경우, <workspace root>/node_modules/.bin
도 에 PATH
에 추가되었으므로, 도구가 워크스페이스의 루트에 설치되었다면 어떤 워크스페이스 패키지의 scripts
에서도 호출될 수 있습니다.
npm run
과의 차이점
기본적으로, pnpm은 사용자 정의 스크립트 (예를 들어 prestart
) 에 대해 임의의 pre
및 post
훅을 실행하지 않습니다. npm으로부터 상속된 이 행위는 스크립트를 명시적인 대신 암시적인 상태로 만들며, 실행 흐름을 난독화합니다. 또한 pnpm serve
가 pnpm preserve
를 동작시키는 놀라운 실행으로 이어졌습니다.
어떤 이유로 npm의 pre/post 스크립트 동작이 필요한 경우, enable-pre-post-scripts
옵션을 사용하세요.
환경
There are some environment variables that pnpm automatically creates for the executed scripts. These environment variables may be used to get contextual information about the running process.
These are the environment variables created by pnpm:
- npm_command - contains the name of the executed command. If the executed command is
pnpm run
, then the value of this variable will be "run-script".
옵션
run
명령어에 대한 모든 옵션은 스크립트의 이름 앞에 나열되어야 합니다. 스크립트의 이름 뒤에 나열된 옵션은 실행된 스크립트에 전달됩니다.
이 모든 것은 --silent
옵션과 함께 pnpm CLI를 실행합니다.
pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch
명령어 이름 뒤에 전달된 모든 인수는 실행된 스크립트에 추가됩니다. 따라서 watch
가 webpack --watch
를 실행하면 이 명령어는 다음과 같습니다.
pnpm run watch --no-color
이렇게 실행됩니다.
webpack --watch --no-color
script-shell
- Default: null
- 유형: path
The shell to use for scripts run with the pnpm run
command.
For instance, to force usage of Git Bash on Windows:
pnpm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
shell-emulator
- 기본값: false
- 유형: Boolean
When true
, pnpm will use a JavaScript implementation of a bash-like shell to execute scripts.
This option simplifies cross-platform scripting. For instance, by default, the next script will fail on non-POSIX-compliant systems:
"scripts": {
"test": "NODE_ENV=test node test.js"
}
But if the shell-emulator
setting is set to true
, it will work on all platforms.
--recursive, -r
This runs an arbitrary command from each package's "scripts" object. If a package doesn't have the command, it is skipped. If none of the packages have the command, the command fails.
--if-present
You can use the --if-present
flag to avoid exiting with a non-zero exit code when the script is undefined. This lets you run potentially undefined scripts without breaking the execution chain.
--parallel
동시성 및 토폴로지 정렬을 완전히 무시하고, prefixed streaming output이 있는 모든 일치하는 패키지에서 즉시 지정된 스크립트를 실행합니다. 긴 빌드 프로세스와 같은 많은 패키지에 대한 장기 실행 프로세스에서 선호되는 플래그입니다.
--stream
Stream output from child processes immediately, prefixed with the originating package directory. This allows output from different packages to be interleaved.
--aggregate-output
Aggregate output from child processes that are run in parallel, and only print output when the child process is finished. It makes reading large logs after running pnpm -r <command>
with --parallel
or with --workspace-concurrency=<number>
much easier (especially on CI). Only --reporter=append-only
is supported.
enable-pre-post-scripts
- 기본값: false
- 유형: Boolean
When true
, pnpm will run any pre/post scripts automatically. So running pnpm foo
will be like running pnpm prefoo && pnpm foo && pnpm postfoo
.
--resume-from <package_name>
Added in: v7.22.0
Resume execution from a particular project. This can be useful if you are working with a large workspace and you want to restart a build at a particular project without running through all of the projects that precede it in the build order.
--report-summary
Added in: v7.28.0
Record the result of the scripts executions into a pnpm-exec-summary.json
file.
An example of a pnpm-exec-summary.json
file:
{
"executionStatus": {
"/Users/zoltan/src/pnpm/pnpm/cli/command": {
"status": "passed",
"duration": 1861.143042
},
"/Users/zoltan/src/pnpm/pnpm/cli/common-cli-options-help": {
"status": "passed",
"duration": 1865.914958
}
}
Possible values of status
are: 'passed', 'queued', 'running'.