본문으로 건너뛰기
버전: Next

pnpm run

별칭: run-script

패키지의 매니페스트 파일에 정의된 스크립트를 실행합니다.

예시

다음과 같이 package.json에 구성된 watch 스크립트가 있다고 가정해 보겠습니다.

"scripts": {
"watch": "webpack --watch"
}

이제 pnpm run watch을 사용하여 해당 스크립트를 실행할 수 있습니다! 간단하지요? 키 입력과 시간을 절약하는 것을 좋아하는 사람들을 위해 주목해야 할 또 다른 사항은 모든 스크립트가 pnpm 명령으로 앨리어싱된다는 것입니다. 따라서 궁극적으로 pnpm watchpnpm run watch 의 축약형입니다 (이미 존재하는 pnpm 명령과 동일한 이름을 공유하지 않는 스크립트에만 해당함).

상세 정보

셸의 기존 PATH에 더하여, pnpm runscripts에 제공된 PATHnode_modules/.bin 을 포함합니다. 즉, 패키지가 설치되어 있는 한 일반 명령어처럼 스크립트에서 사용할 수 있습니다. 예를 들어, eslint 가 설치되어 있는 경우, 다음과 같이 스크립트 를 작성할 수 있습니다.

"lint": "eslint src --fix"

그리고 eslint 가 셸에 전역적으로 설치되어 있지 않아도 실행됩니다.

워크스페이스의 경우, <workspace root>/node_modules/.bin 도 에 PATH에 추가되었으므로, 도구가 워크스페이스의 루트에 설치되었다면 어떤 워크스페이스 패키지의 scripts에서도 호출될 수 있습니다.

npm run과의 차이점

기본적으로, pnpm은 사용자 정의 스크립트 (예를 들어 prestart) 에 대해 임의의 prepost 후크를 실행하지 않습니다. npm으로부터 상속된 이 행위는 스크립트를 명시적인 대신 암시적인 상태로 만들며, 실행 흐름을 난독화합니다. 또한 pnpm servepnpm preserve 를 동작시키는 놀라운 실행으로 이어졌습니다.

어떤 이유로 npm의 pre/post 스크립트 동작이 필요한 경우, enable-pre-post-scripts 옵션을 사용하세요.

Environment

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".

옵션

Any options for the run command should be listed before the script's name. Options listed after the script's name are passed to the executed script.

All these will run pnpm CLI with the --silent option:

pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch

Any arguments after the command's name are added to the executed script. So if watch runs webpack --watch, then this command:

pnpm run watch --no-color

will run:

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

Completely disregard concurrency and topological sorting, running a given script immediately in all matching packages with prefixed streaming output. This is the preferred flag for long-running processes over many packages, for instance, a lengthy build process.

--stream

Stream output from child processes immediately, prefixed with the originating package directory. This allows output from different packages to be interleaved.

--aggregate-output

병렬로 실행되는 자식 프로세스의 출력을 집계하고 자식 프로세스가 완료될 때만 결과를 출력합니다. pnpm -r <command> 명령어가 --parallel 또는 --workspace-concurrency=<number> 와 함께 실행한 후 대용량 로그를 읽기가 훨씬 쉬게 만들어 줍니다 (특히 CI에서). --reporter=append-only 만 지원됩니다.

enable-pre-post-scripts

  • 기본값: false
  • 유형: Boolean

true이면, pnpm은 모든 pre/post 스크립트를 자동으로 실행합니다. 따라서 pnpm foo 를 실행하는 것은 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.

--filter <package_selector>

필터링에 대해 자세히 알아보세요.