본문으로 건너뛰기
버전: 7.x

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 옵션을 사용하세요.

옵션

run 명령어에 대한 모든 옵션은 스크립트의 이름 앞에 나열되어야 합니다. 스크립트의 이름 뒤에 나열된 옵션은 실행된 스크립트에 전달됩니다.

이 모든 것은 --silent 옵션과 함께 pnpm CLI를 실행합니다.

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

명령어 이름 뒤에 전달된 모든 인수는 실행된 스크립트에 추가됩니다. 따라서 watchwebpack --watch를 실행하면 이 명령어는 다음과 같습니다.

pnpm run watch --no-color

이렇게 실행됩니다.

webpack --watch --no-color

script-shell

  • 기본값: null
  • 유형: path

pnpm run 명령어를 실행할 셸입니다.

예를 들어, Windows에서 Git Bash를 사용하도록 강제하려면:

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

이것은 각 패키지의 "scripts"에서 임의의 명령어를 실행합니다. 패키지에 명령이 없으면 건너뜁니다. 명령이 있는 패키지가 하나도 없으면, 실패합니다.

--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 을 실행하는 것과 같습니다.

--filter <package_selector>

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