pnpm run
별칭: run-script
패키지의 매니페스트 파일에 정의된 스크립트를 실행합니다.
예시
다음과 같이 package.json
에 구성된 watch
스크립트가 있다고 가정해 보겠습니다.
"scripts": {
"watch": "webpack --watch"
}
이제 pnpm run watch
을 사용하여 해당 스크립트를 실행할 수 있습니다! 간단하지요? 키 입력과 시간을 절약하는 것을 좋아하는 사람들을 위해 주목해야 할 또 다른 사항은 모든 스크립트가 pnpm 명령으로 앨리어싱된다는 것입니다. 따라서 궁극적으로 pnpm watch
는 pnpm run watch
의 축약형입니다 (이미 존재하는 pnpm 명령과 동일한 이름을 공유하지 않는 스크립트에만 해당함).
상세 정보
셸의 기존 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
옵션을 사용하세요.
옵션
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
- 기본값: null
- 유형: path
pnpm run
명령어와 함께 실행할 셸 스크립트.
예를 들어, Windows에서 Git Bash를 강제로 사용하려면:
pnpm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
shell-emulator
- 기본값: false
- 유형: Boolean
true
이면, pnpm은 스크립트를 실행하기 위해 bash-like shell 의 JavaScript 구현을 사용합니다.
이 옵션은 플랫폼 간 스크립팅을 단순화합니다. 예를 들어, 기본적으로 다음 스크립트는 POSIX 규격이 아닌 시스템에서 실패합니다.
"scripts": {
"test": "NODE_ENV=test node test.js"
}
그러나 shell-emulator
의 설정이 true
로 설정되어 있으면 모든 플랫폼에서 동작합니다.
--recursive, -r
이것은 각 패키지의 "scripts" 개체에서 임의의 명령어를 실행합니다. 패키지에 명령어가 없으면 건너뜁니다. 패키지에 명령어가 없으면 명령어는 실패합니다.
--if-present
스크립트가 정의되지 않은 경우 --if-present
플래그를 사용하여 non-zero 종료 코드 로 종료되는 것을 방지할 수 있습니다. 이렇게 하면 실행 체인을 끊지 않고 잠재적으로 정의되지 않은 스크립트 을 실행할 수 있습니다.
--parallel
동시성 및 토폴로지 정렬을 완전히 무시하고, 접두부가 있는 스트리밍 출력이 있는 모든 일치하는 패키지에서 즉시 지정된 스크립트를 실행합니다. 긴 빌드 프로세스와 같은 많은 패키지에 대한 장기 실행 프로세스에서 선호되는 플래그입니다.
--stream
원래의 패키지 디렉토리가 접두사로 붙은 자식 프로세스의 출력을 즉시 스트리밍합니다. 이를 통해 다른 패키지의 출력이 인터리브될 수 있습니다.
--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
을 실행하는 것과 같습니다.