pnpm install
별칭: i
pnpm install은 프로젝트 내 모든 의존성 패키지들을 설치하는데에 사용됩니다.
CI 환경에서, lockfile이 있지만 업데이트가 필요한 경우 설치가 실패합니다.
워크스페이스내에서, pnpm install 은 모든 프로젝트의 모든 의존성을 설치합니다. 이 동작을 비활성화하려면, recursive-install설정을 false로 설정하세요.
요약#
| 명령어 | 의미 |
|---|---|
pnpm i --offline | 스토어에서만 오프라인으로 설치 |
pnpm i --frozen-lockfile | pnpm-lock.yaml 이 업데이트되지 않음 |
pnpm i --lockfile-only | pnpm-lock.yaml 만 업데이트됨 |
pnpm i --dry-run | 변경 사항을 저장하지 않고 미리 보기 |
의존성 필터링 옵션#
lockfile이 없으면 pnpm은 이를 새로 생성해야 하며, 이는 의존성 필터링과 관계없이 일관성을 유지해야 합니다. 따라서 lockfile이 없는 디렉토리에서 pnpm install --prod 을 실행하면 여전히 dev dependencies를 확인하며, 확인에 실패할 경우 에러가 발생합니다. 이 규칙의 유일한 예외는 link: 의존성입니다.
--frozen-lockfile 이 없으면 pnpm은 file: 의존성에서 오래된 정보를 확인합니다. 따라서 file: 의 대상이 제거된 환경에서 --frozen-lockfile 없이 pnpm install --prod 를 실행하면 에러가 발생합니다.
--prod, -P#
- 기본값: false
- 유형: Boolean
true인 경우 pnpm은 devDependencies 에 나열된 패키지를 설치하지 않고 이미 설치된 패키지를 제거합니다. false인 경우 pnpm은 devDependencies 및 dependencies에 나열된 모든 패키지를 설치합니다.
--dev, -D#
오직 devDependencies만 설치되며 이미 설치된 dependencies또한 제거됩니다.
--no-optional#
optionalDependencies 가 설치되지 않습니다.
--no-runtime#
추가된 버전: v11.1.0
런타임 항목(예: devEngines.runtime을 통해 다운로드되는 Node.js) 설치를 건너뜁니다. 이때 lockfile은 변경되지 않으므로 frozen 설치도 여전히 검증을 통과합니다. 런타임 가져오기와 bin 링크만 건너뜁니다.
이 옵션은 pnpm install이 실행되기 전에 런타임이 외부에서(예: pnpm runtime -g set node <version>를 통해) 준비되는 CI 매트릭스에서 유용합니다.
이 옵션은 pnpm-workspace.yaml에서 runtime=false 설정으로도 지정할 수 있습니다.
옵션#
--force#
의존성 강제 재설치: 저장소에서 수정된 패키지를 다시 가져오고, 호환되지 않는 pnpm 버전에서 생성된 lockfile 및 모듈 디렉터리를 다시 만듭니다. 현재 환경(cpu, os, arch)을 만족하지 않더라도 모든 optionalDependencies를 설치합니다.
--offline#
- 기본값: false
- 유형: Boolean
true이면 pnpm은 저장소에 이미 존재하는 패키지만 사용합니다. 로컬에서 패키지를 찾을 수 없으면 설치가 실패합니다.
--prefer-offline#
- 기본값: false
- 유형: Boolean
true이면 캐시된 데이터에 대한 부실 검사가 무시되지만, 누락된 데이터는 서버에서 요청됩니다. 전체 오프라인 모드를 강제 실행하려면, --offline을 사용하세요.
--no-lockfile#
pnpm-lock.yaml 파일을 읽거나 생성하지 않습니다.
--lockfile-only#
- 기본값: false
- 유형: Boolean
사용하면 pnpm-lock.yaml 및 package.json만 업데이트합니다. node_modules 디렉토리에는 아무것도 기록되지 않습니다.
--dry-run#
추가된 버전: v11.8.0
전체 의존성 해석을 실행하고, 디스크에 아무것도 쓰지 않은 채 실제 설치 시 무엇이 변경될지 보고합니다. 어떠한 lockfile, 매니페스트, node_modules 변경 사항도 저장되지 않습니다.
드라이 런이 완료되면, 실제 설치 시 lockfile이 업데이트될 것이라고 보고하더라도 종료 코드 0으로 종료됩니다.
--dry-run은 pnpr 서버가 설정된 경우 사용할 수 없습니다. 해당 설치 경로는 서버를 통해 해석하고 링크하기 때문입니다.
--fix-lockfile#
깨진 lockfile 항목을 자동으로 수정합니다.
--update-checksums#
추가된 버전: v11.4.0
다운로드한 tarball의 해시가 pnpm-lock.yaml에 기록된 integrity와 일치하지 않을 때, 레지스트리가 현재 제공하는 값으로 lockfile의 tarball integrity 값을 갱신합니다.
기본적으로 v11.4.0부터 integrity 불일치는 치명적인 오류입니다. pnpm install은 레지스트리에서 조용히 다시 해석하여 lockfile의 integrity를 덮어쓰는 대신 ERR_PNPM_TARBALL_INTEGRITY와 함께 종료됩니다. 이는 커밋된 lockfile을 함께 배포하는 프로젝트를, 손상된 레지스트리나 프록시 또는 다시 게시된 버전이 깨끗한 머신에서 공격자가 제어하는 콘텐츠로 바꿔치기하는 것으로부터 보호합니다.
--update-checksums는 정당한 경우(예: 레지스트리가 tarball을 다시 작성했고 새 바이트가 올바른지 확인한 경우)를 위해 범위를 좁게 한정한 옵트인입니다. 우회가 적용되면 여전히 경고가 출력되므로 해당 작업을 감사할 수 있습니다.
--force와 pnpm update는 의도적으로 integrity 검사를 우회하지 않습니다. --frozen-lockfile은 변경되지 않으며, --fix-lockfile은 문서화된 목적(누락된 lockfile 항목 채우기)을 그대로 유지하고 역시 우회 수단이 아닙니다.
--frozen-lockfile#
- 기본값:
- 비 CI의 경우: false
- CI의 경우: true, lockfile이 있는 경우
- 유형: Boolean
true 인 경우, pnpm은 lockfile을 생성하지 않고 lockfile 이 매니페스트와 동기화되지 않았거나 업데이트가 필요하거나 lockfile이 없는 경우 설치에 실패합니다.
이 설정은 CI 환경에서 기본적으로 true 입니다. 다음 코드는 CI 환경을 감지하는 데 사용됩니다.
exports.isCI = !!(
env.CI || // Travis CI, CircleCI, Cirrus CI, GitLab CI, Appveyor, CodeShip, dsari
env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI
env.BUILD_NUMBER || // Jenkins, TeamCity
env.RUN_ID || // TaskCluster, dsari
exports.name ||
false
)
--merge-git-branch-lockfiles#
모든 git branch lockfile을 병합합니다. git branch lockfile에 대해 더 자세히 알아보세요.
--reporter=<name>#
- 기본값:
- TTY stdout의 경우: default
- 비 TTY stdout의 경우: append-only
- 유형: default, append-only, ndjson, silent
터미널에 설치 진행률에 대한 디버그 정보를 기록할 기록자를 선택할 수 있습니다.
- silent - 치명적인 오류조차도 콘솔에 출력되지 않습니다
- default - stdout이 TTY일 때의 기본 리포터입니다.
- append-only - 출력은 항상 끝에 추가됩니다. 커서 조작이 수행되지 않습니다.
- ndjson - 가장 장황한 리포터. 모든 로그를 ndjson 형식으로 출력합니다
출력되는 정보의 종류를 변경하려면 loglevel 설정을 사용하세요.
--shamefully-hoist#
- 기본값: false
- 유형: Boolean
npm 또는 yarn과 유사한 평평한 node_modules 구조를 생성합니다. 경고: 이것은 매우 권장되지 않습니다.
--ignore-scripts#
- 기본값: false
- 유형: Boolean
프로젝트의 package.json과 그 의존성에 정의된 모든 스크립트를 실행하지 않습니다.
--filter <package_selector>#
--resolution-only#
의존성 해석을 다시 실행합니다: 피어 의존성 문제를 출력할 때 유용합니다.
정보
이 플래그는 pnpm 11에만 존재합니다. pnpm 12는 이 플래그를 구현하지 않으며 error: unexpected argument '--resolution-only' found 오류와 함께 거부합니다.
두 버전 모두에서 피어 의존성 문제를 나열하려면 대신 pnpm peers check를 실행하세요. 이 명령은 lockfile에서 문제를 읽으므로 재해석이나 설치가 필요하지 않습니다.
--cpu=<name>#
버전 10.14.0에서 추가됨
설치할 네이티브 모듈의 CPU 아키텍처를 재정의합니다. 허용되는 값은 process.arch에서 파생된 package.json의 cpu 필드와 동일합니다.
--os=<name>#
버전 10.14.0에서 추가됨
설치할 네이티브 모듈의 OS를 재정의합니다. 허용되는 값은 package.json의 os 필드와 동일하며, 이는 process.platform에서 파생됩니다.
--libc=<name>#
버전 10.14.0에서 추가됨
설치할 네이티브 모듈의 libc를 재정의합니다. 허용되는 값은 package.json의 libc 필드와 동일합니다.