빌드 설정
ignoreScripts#
- 기본값: false
- 타입: Boolean
프로젝트 package.json 및 해당 종속성에 정의된 스크립트를 실행하지 않습니다.
참고
이 플래그는 .pnpmfile.mjs의 실행을 막지 않습니다
childConcurrency#
- 기본값: 5
- 유형: Number
동시에 할당할 최대 자식 프로세스 수로, node_modules를 빌드하는 데 사용됩니다.
sideEffectsCache#
- 기본값: true
- Type: Boolean or Object
(pre/post)install 훅의 결과를 사용하고 캐시합니다.
패키지의 내용(예: 빌드 출력)을 pre/post install 스크립트가 수정하면, pnpm은 수정된 패키지를 전역 스토어에 저장합니다. On future installs on the same machine, pnpm reuses this cached, prebuilt version, which makes installs faster.
참고
다음과 같은 경우 이 설정을 비활성화하는 것이 좋습니다:
- 설치 스크립트가 패키지 디렉터리 외부의 파일을 수정하는 경우(pnpm은 이러한 변경 사항을 추적하거나 캐시할 수 없습니다).
- 스크립트가 패키지 빌드와 관련 없는 부수 효과를 수행하는 경우.
An object says the same thing in more detail, and is the canonical way to declare the remote tier:
sideEffectsCache:
read: true
write: true
remote:
org: acme
packages:
- native-addon
read: restore a build from the cache when one is present. Default true.write: save a package's build output to the cache. Default true.remote: reuse builds across machines; see below.
sideEffectsCache: true is the shorthand for reading and writing, and is what
the setting meant before it grew a remote tier. Writing without reading
(read: false, write: true) populates a cache the run never consumes, which is
what a job that warms one for others wants.
Since v11.26.0, the --side-effects-cache and --no-side-effects-cache flags, and
PNPM_CONFIG_SIDE_EFFECTS_CACHE, toggle the local cache only. A remote tier
declared under sideEffectsCache.remote is left in place, so a run can turn the
local cache off without losing the shared one.
sideEffectsCacheReadonly#
- 기본값: false
- 타입: Boolean
부수 효과 캐시가 있는 경우에만 사용하고, 새 패키지에 대해서는 생성하지 않습니다.
The older spelling of sideEffectsCache: { read: true, write: false }.
sideEffectsCache.remote#
Added in: v11.25.0
- 기본값: undefined
- Type: Object
Opt in to reusing a dependency's build output across machines, by restoring
signed, organization-scoped artifacts through a pnpr server instead of
running the package's lifecycle scripts locally. This is a proof of concept: it
is off unless configured, it needs a pnpr server started with
artifacts.enabled: true, and it restores artifacts on Linux/glibc, macOS, and
Windows, on x64 and arm64. Other operating systems and libc families build
locally.
A repository declares eligibility and nothing else:
pnprServer: http://127.0.0.1:7677
allowBuilds:
native-addon: true
sideEffectsCache:
remote:
org: acme
packages:
- native-addon
Declaring only remote leaves read and write at their defaults, so the
local cache keeps working as it did.
packages is an eligibility list, not a permission: a package is only a
candidate when it also passes allowBuilds, has
requiresBuild: true, and has a verified source integrity. Listing a package
here does not review its build scripts for you. Under the default
strictDepBuilds an install still fails with
ERR_PNPM_IGNORED_BUILDS when it reaches a build nobody has ruled on, and a
package denied with allowBuilds: false is never built, from the cache or
otherwise.
Everything describing the act of signing (publish, keyId, builderId,
imageDigest, architectureBaseline, buildEnv, trustedKeys and
privateKey) is refused in pnpm-workspace.yaml with
ERR_PNPM_WORKSPACE_REMOTE_SIDE_EFFECTS_TRUST, and is read from the global
configuration file or the environment instead. A cloned
repository is not a trust root, and must not be able to turn the machine's
signing key into a signing oracle.
Any cache failure (an unreachable server, an unverifiable signature, an incompatible platform, a bad blob) falls back to the ordinary local build. See Shared side-effects cache for the full setup, including the server flag, the trust material, and how an artifact is published.
Since v11.25.0, a restored artifact is saved in the shared store together with its signed origin. Before a later install reuses it, pnpm checks the signature again against the machine's current keys and revalidates its owner, package and source identity, platform, policy, and stored files. A bad remote variant is quarantined for that pnpr server and is not selected again.
참고
remoteSideEffectsCache is the older spelling of this setting, and
organization of its org field; both still work.
The two spellings are merged, not chosen between: a field set under both takes
its value from sideEffectsCache.remote, and a field set under only one is kept
either way. That is what lets a repository declare the org in
pnpm-workspace.yaml while the machine supplies the signing key from the global
config under whichever spelling it already used.
unsafePerm#
- 기본값: root로 실행 중이면 false, 그렇지 않으면 true
- 타입: Boolean
When set to false, lifecycle scripts run with TMPDIR set to the
package's node_modules/.tmp directory.
nodeOptions#
- 기본값: NULL
- 유형: String
NODE_OPTIONS 환경 변수를 통해 Node.js에 전달할 옵션입니다. 이는 pnpm 자체의 실행 방식에는 영향을 주지 않지만, 라이프사이클 스크립트가 호출되는 방식에는 영향을 줍니다.
기존 NODE_OPTIONS를 유지하려면 설정에서 ${NODE_OPTIONS}를 사용하여 기존 환경 변수를 참조할 수 있습니다:
nodeOptions: "${NODE_OPTIONS:- } --experimental-vm-modules"
verifyDepsBeforeRun#
- 기본값: install
- 유형: install, warn, error, prompt, false
이 설정을 사용하면 스크립트를 실행하기 전에 종속성 상태를 확인할 수 있습니다. 이 검사는 pnpm run 및 pnpm exec 명령에서 실행됩니다. 다음 값이 지원됩니다:
install-node_modules가 최신 상태가 아니면 자동으로 install을 실행합니다. If that install fails, for example because the store is read-only or there is no network, pnpm prints a warning and runs the command anyway.warn-node_modules가 최신 상태가 아니면 경고를 출력합니다.prompt-node_modules가 최신 상태가 아니면 install 실행 권한을 사용자에게 묻습니다.error-node_modules가 최신 상태가 아니면 오류를 발생시킵니다.false- 종속성 검사를 비활성화합니다.
strictDepBuilds#
버전 10.3.0에서 추가됨
- 기본값: true
- 타입: Boolean
strictDepBuilds가 활성화되면, 검토되지 않은 빌드 스크립트(일명 postinstall 스크립트)가 있는 종속성이 하나라도 있을 경우 설치가 오류 종료 코드로 종료됩니다.
allowBuilds#
버전 10.26.0에서 추가됨
스크립트 실행을 명시적으로 허용(true)하거나 허용하지 않을(false) 패키지 매처의 맵입니다.
allowBuilds:
esbuild: true
core-js: false
# nx versions with build scripts not listed below will
# fail by default with ERR_PNPM_IGNORED_BUILDS
nx@21.6.4 || 21.6.5: true
nx@21.6.0: false
Git-hosted packages: a package name on its own never approves builds for a git or tarball dependency, because the name alone does not identify the artifact. 정확히 해석된 경로(커밋 포함)로 승인하거나, v11.11.0부터는 리포지터리 URL로 승인할 수 있습니다:
allowBuilds:
# Approves any commit from this repository
'foo@git+ssh://git@example.com/org/foo.git': true
# Approves only this exact commit
'bar@git+https://github.com/org/bar.git#abc123': true
리포지터리 형식을 사용하면 신뢰할 수 있는 git 종속성이 새 커밋마다 다시 승인하지 않고도 브랜치 업데이트 후에도 빌드 스크립트를 계속 실행할 수 있습니다. 키는 패키지 이름 뒤에 @와 git URL이 오며 #<ref> 접미사는 없습니다. 일치는 정확히 이루어지므로 같은 리포지터리에 대한 git+ssh://와 git+https:// URL은 별개의 키입니다.
Since v11.19.0, the repository form also approves git-hosted packages that pnpm downloads as a tarball rather than clones, such as github: dependencies, which are fetched from codeload.github.com. foo@git+https://github.com/org/foo.git 항목은 pnpm이 리포지터리를 복제하든 tarball을 다운로드하든 foo를 승인합니다. GitLab 및 Bitbucket tarball 다운로드도 같은 방식으로 매칭됩니다. 전체 tarball 종속성 경로로 특정 해석된 커밋을 승인하거나 거부하는 방식은 계속 작동합니다.
패키지 이름에 의한 거부는 이런 식으로 제한되지 않습니다: foo: false는 foo가 레지스트리에서 오든 git에서 오든 foo를 차단합니다.
기본 동작: allowBuilds에 나열되지 않은 패키지는 기본적으로 허용되지 않으며 검토되지 않은 것으로 처리됩니다. 기본적으로 오류가 출력됩니다(strictDepBuilds의 기본값은 true입니다). strictDepBuilds를 false로 설정하면 대신 경고가 출력됩니다.
설치 중 allowBuilds에 아직 나열되지 않은 빌드 무시 종속성은 자리표시자 값과 함께 pnpm-workspace.yaml에 자동으로 추가되므로 직접 true 또는 false로 설정할 수 있습니다. --allow-build 플래그는 pnpm add와 pnpm approve-builds에서 해당 항목을 여기에도 기록합니다.
이전 설정에서 마이그레이션
이 설정을 자동으로 마이그레이션하려면 pnpx codemod run pnpm-v10-to-v11을 v10에서 v11로 마이그레이션 가이드에서 안내하는 대로 실행하세요.
다음 설정은 v11에서 제거되었으며 allowBuilds로 대체되었습니다: onlyBuiltDependencies, onlyBuiltDependenciesFile, neverBuiltDependencies, ignoredBuiltDependencies, 그리고 ignoreDepScripts.
이전:
onlyBuiltDependencies:
- electron
neverBuiltDependencies:
- core-js
ignoredBuiltDependencies:
- esbuild
이후:
allowBuilds:
electron: true
core-js: false
esbuild: false
dangerouslyAllowAllBuilds#
버전 10.9.0에서 추가됨
- 기본값: false
- 타입: Boolean
true로 설정하면 종속성의 모든 빌드 스크립트(예: preinstall, install, postinstall)가 승인 없이 자동으로 실행됩니다.
경고
This setting allows all dependencies, including transitive ones, to run install scripts, both now and in the future. 현재 종속성 그래프가 안전해 보이더라도:
- 향후 업데이트에서 신뢰할 수 없는 새 종속성이 추가될 수 있습니다.
- 기존 패키지가 이후 버전에서 스크립트를 추가할 수 있습니다.
- 패키지가 탈취되거나 손상되어 악성 코드를 실행하기 시작할 수 있습니다.
For maximum safety, only enable this if you're fully aware of the risks and trust the entire ecosystem you're pulling from. It's recommended to review and allow builds explicitly.