设置(pnpm-workspace.yaml)
pnpm 从命令行、环境变量和 pnpm-workspace.yaml 获取其配置。
仅有 auth 和 registry 设置从 .npmrc 文件读取。所有其他设置(如 hoistPattern、nodeLinker、shamefullyHoist 等)必须在 pnpm-workspace.yaml 或全局的 ~/.config/pnpm/config.yaml 中配置。
pnpm config 命令可用于读取和编辑项目与全局配置文件的内容。
相关的配置文件有:
- 每个项目的配置文件:
/path/to/my/project/pnpm-workspace.yaml - Global configuration file
配置文件中的值可以使用 ${NAME} 语法包含环境变量。环境变量也可以指定默认值。使用 ${NAME-fallback} 会在 NAME 未设置时返回 fallback。${NAME:-fallback} 会在 NAME 未设置或为空字符串时返回 fallback。
warning
自 v11.5.3 起,在 pnpm-workspace.yaml 中定义 registry URL 的设置里不会展开环境变量:registry,以及 registries 和 namedRegistries 的 URL 值。这些设置中包含 ${...} 占位符的值会被忽略。在 registries 的 registry 声明形式 中(自 v11.23.0 起),URL 是键而非值,同样的规则适用于键。由于 pnpm-workspace.yaml 会提交到仓库,在 registry URL 中展开环境变量可能会被恶意仓库利用,把环境中的机密泄露到攻击者控制的 registry。请改为在受信任的位置配置动态 registry URL:全局配置文件或 CLI 选项。
packages
除设置之外,pnpm-workspace.yaml 还定义了工作区的根,并让你能将目录纳入 / 排除出工作区。如果省略 packages 字段,则只有根包包含在工作区中。
例如:
pnpm-workspace.yaml
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/**'
根包始终被纳入,即使使用了自定义位置通配符。
catalogs 也在 pnpm-workspace.yaml 文件中定义。详情见 Catalogs。
pnpm-workspace.yaml
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 可以指定为一个从包名到配置对象的映射:
pnpm-workspace.yaml
packages:
- "packages/project-1"
- "packages/project-2"
packageConfigs:
"project-1":
saveExact: true
"project-2":
savePrefix: "~"
或者作为一个由通配符匹配的规则数组:
pnpm-workspace.yaml
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
- virtualStoreType
- enableGlobalVirtualStore
依赖提升设置
存储设置
锁文件设置
- 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
- sideEffectsCache.remote
- 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
- globalShims
- 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
在其他处文档化的设置
本页内容译自pnpm 官方文档(MIT License),如有出入以英文原文为准。