설정 (pnpm-workspace.yaml)
pnpm은 명령줄, 환경 변수, pnpm-workspace.yaml에서 설정을 가져옵니다.
.npmrc 파일에서는 인증 및 레지스트리 설정만 읽습니다. 그 외의 모든 설정(hoistPattern, nodeLinker, shamefullyHoist 등)은 pnpm-workspace.yaml 또는 글로벌 ~/.config/pnpm/config.yaml에서 설정해야 합니다.
pnpm config 명령을 사용하면 프로젝트 단위 및 전역 설정 파일의 내용을 조회하거나 수정할 수 있습니다.
사용되는 주요 설정 파일은 다음과 같습니다:
- 프로젝트별 설정 파일:
/path/to/my/project/pnpm-workspace.yaml - 전역 설정 파일
참고
인증 관련 설정은 .npmrc를 통해 처리됩니다.
설정 파일의 값은 ${NAME} 구문을 사용해 환경 변수를 포함할 수 있습니다. 환경 변수의 기본값을 지정할 수도 있습니다. ${NAME-fallback}을 사용하면 NAME이 설정되지 않은 경우 fallback을 반환합니다. ${NAME:-fallback}은 NAME이 설정되지 않았거나 빈 문자열인 경우 fallback을 반환합니다.
경고
버전 v11.5.3부터 레지스트리 URL을 정의하는 pnpm-workspace.yaml의 설정, 즉 registry와 registries 및 namedRegistries의 URL 값에서는 환경 변수가 확장되지 않습니다. 이러한 설정에서 ${...} 플레이스홀더를 포함하는 값은 무시됩니다. registries의 레지스트리 선언 형식(v11.23.0부터)에서는 URL이 값이 아니라 키이며, 키에도 동일한 규칙이 적용됩니다. pnpm-workspace.yaml은 저장소에 커밋되므로, 레지스트리 URL에서 환경 변수를 확장하면 악의적인 저장소가 이를 악용해 환경의 비밀 정보를 공격자가 제어하는 레지스트리로 유출할 수 있습니다. 대신 신뢰할 수 있는 위치, 즉 글로벌 설정 파일이나 CLI 옵션에서 동적 레지스트리 URL을 설정하세요.
참고
버전 v11.22.0부터 프로젝트의 pnpm-workspace.yaml은 pnpm이 자격 증명, 자체 설치 또는 기타 머신 수준 상태를 보관할 위치를 지정할 수 없습니다: bin, configDir, dir, globalBinDir, globalDir, npmrcAuthFile, pnpmHomeDir, stateDir, userconfig, workspaceDir은 해당 파일에서 경고와 함께 무시됩니다. 대신 글로벌 설정 파일이나 명령줄에서 설정하세요. cacheDir와 storeDir은 영향을 받지 않습니다.
packages#
pnpm-workspace.yaml은 설정 외에도 workspace의 루트를 정의하며, 워크스페이스에 디렉터리를 포함하거나 제외할 수 있게 해 줍니다. packages 필드를 생략하면 루트 패키지만 워크스페이스에 포함됩니다.
예시:
packages: # specify a package in a direct subdir of the root - 'my-app' # all packages in direct subdirs of packages/ - 'packages/*' # all packages in subdirs of components/ - 'components/**' # exclude packages that are inside test directories - '!**/test/**'
루트 패키지는 사용자 지정 위치 와일드카드가 사용되는 경우에도 항상 포함됩니다.
카탈로그도 pnpm-workspace.yaml 파일에 정의됩니다. 자세한 내용은 Catalogs를 참고하세요.
packages:
- 'packages/*'
catalog:
chalk: ^4.1.2
catalogs:
react16:
react: ^16.7.0
react-dom: ^16.7.0
react17:
react: ^17.10.0
react-dom: ^17.10.0
packageConfigs#
추가된 버전: v11.0.0
개별 워크스페이스 패키지에 대해 프로젝트별 설정을 지정할 수 있습니다. 이는 워크스페이스 프로젝트별 .npmrc 파일을 대체합니다.
packageConfigs는 패키지 이름과 설정 객체의 맵으로 지정할 수 있습니다:
packages:
- "packages/project-1"
- "packages/project-2"
packageConfigs:
"project-1":
saveExact: true
"project-2":
savePrefix: "~"
또는 패턴 매칭 규칙의 배열로 지정할 수 있습니다:
packages:
- "packages/project-1"
- "packages/project-2"
packageConfigs:
- match: ["project-1", "project-2"]
modulesDir: "node_modules"
saveExact: true
설정#
모든 설정은 주제별로 그룹화되어 아래에 나열되어 있습니다. 각 설정을 따라가 문서를 읽거나, 그룹의 전체 레퍼런스를 여세요.
종속성 해석#
- overrides
- packageExtensions
- allowedDeprecatedVersions
- update
- supportedArchitectures
- ignoredOptionalDependencies
- minimumReleaseAge
- minimumReleaseAgeExclude
- minimumReleaseAgeExcludePrune
- minimumReleaseAgeIgnoreMissingTime
- minimumReleaseAgeStrict
- trustPolicy
- trustPolicyExclude
- trustPolicyIgnoreAfter
- trustLockfile
- blockExoticSubdeps
- registries
- namedRegistries
Node-Modules 설정#
- modulesDir
- nodeLinker
- nodeExperimentalPackageMap
- nodePackageMapType
- symlink
- enableModulesDir
- virtualStoreDir
- virtualStoreDirMaxLength
- virtualStoreOnly
- packageImportMethod
- modulesCacheMaxAge
- dlxCacheMaxAge
- enableGlobalVirtualStore
의존성 호이스팅 설정#
스토어 설정#
Lockfile 설정#
- lockfile
- preferFrozenLockfile
- lockfileIncludeTarballUrl
- gitBranchLockfile
- mergeGitBranchLockfilesBranchPattern
- peersSuffixMaxLength
네트워크 설정#
요청 설정#
- gitShallowHosts
- networkConcurrency
- fetchRetries
- fetchRetryFactor
- fetchRetryMintimeout
- fetchRetryMaxtimeout
- fetchTimeout
- fetchWarnTimeoutMs
- fetchMinSpeedKiBps
피어 종속성 설정#
- autoInstallPeers
- dedupePeerDependents
- dedupePeers
- strictPeerDependencies
- resolvePeersFromWorkspaceRoot
- peerDependencyRules
CLI 설정#
- [no-]color
- loglevel
- useBetaCli
- recursiveInstall
- engineStrict
- npmPath
- pmOnFail
- ignoreWorkspaceRootCheck
Node.js 설정#
빌드 설정#
- ignoreScripts
- childConcurrency
- sideEffectsCache
- sideEffectsCacheReadonly
- unsafePerm
- nodeOptions
- verifyDepsBeforeRun
- strictDepBuilds
- allowBuilds
- dangerouslyAllowAllBuilds
버전 관리 설정#
- versioning.fixed
- versioning.ignore
- versioning.maxBump
- versioning.lanes
- versioning.epics
- versioning.changelog.storage
기타 설정#
- savePrefix
- tag
- globalDir
- globalBinDir
- npmrcAuthFile
- stateDir
- cacheDir
- useStderr
- updateNotifier
- preferSymlinkedExecutables
- ignoreCompatibilityDb
- resolutionMode
- registrySupportsTimeField
- extendNodePath
- deployAllFiles
- dedupeDirectDeps
- optimisticRepeatInstall
- requiredScripts
- enablePrePostScripts
- scriptShell
- shellEmulator
- catalogMode
- ci
- catalogPrune
워크스페이스 설정#
이 설정들도 pnpm-workspace.yaml에서 구성하지만, 해당 설정이 속한 워크스페이스 기능과 함께 문서화되어 있습니다.
- linkWorkspacePackages
- injectWorkspacePackages
- dedupeInjectedDeps
- syncInjectedDepsAfterScripts
- preferWorkspacePackages
- sharedWorkspaceLockfile
- saveWorkspaceProtocol
- includeWorkspaceRoot
- ignoreWorkspaceCycles
- disallowWorkspaceCycles
- failIfNoMatch
다른 곳에 문서화된 설정#
- patchedDependencies
- pnpmfile, globalPnpmfile 및 ignorePnpmfile
.npmrc에서 읽는 인증 설정