构建设置
ignoreScripts#
- 默认值: false
- 类型:Boolean
不执行项目 package.json 及其依赖中定义的任何脚本。
注意
该标记不会阻止 .pnpmfile.mjs 的执行
childConcurrency#
- 默认值:5
- 类型:Number
同时分配的最大子进程数以构建 node_modules。
sideEffectsCache#
- 默认值:true
- 类型:Boolean
使用且缓存 (pre/post)install 钩子的结果。
当安装前/安装后脚本修改包的内容(例如构建输出)时,pnpm 会将修改后的包保存在全局存储中。在同一台机器上的未来安装中,pnpm 会重复使用这个缓存的预构建版本,从而使安装速度显著加快。
注意
你可能想要禁用此设置,如果:
- 安装脚本修改包目录外部的文件(pnpm 无法跟踪或缓存这些更改)。
- 这些脚本执行的副作用与构建包无关。
sideEffectsCacheReadonly#
- 默认值: false
- 类型:Boolean
仅在存在 side effects cache 时使用,不要为新包创建它。
unsafePerm#
- 默认值:如果以 root 身份运行,则为 false,否则为 true
- 类型:Boolean
设置为 true 以便在运行包脚本package scripts时启用 UID/GID 切换。如果显式设置为 false,则以非 root 用户身份安装将失败。
nodeOptions#
- 默认值: NULL
- 类型:字符串
通过 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不是最新的,则自动运行安装。warn- 如果node_modules不是最新的,则打印警告。prompt- 如果node_modules不是最新的,则提示用户提供权限。error- 如果node_modules不是最新的,则会引发错误。false——禁用依赖性检查。
strictDepBuilds#
添加于:v10.3.0
- 默认值:true
- 类型:Boolean
当启用 strictDepBuilds 时,如果任何依赖项具有未审核的构建脚本(又名安装后脚本),则安装将以非零退出代码退出。
allowBuilds#
添加于:v10.26.0
包匹配器映射,用于显式允许(true)或禁止(false)脚本执行。
allowBuilds:
esbuild: true
core-js: false
# 未在下方列出的 nx 版本构建脚本将
# 在默认情况下失败,并返回 ERR_PNPM_IGNORED_BUILDS 错误
nx@21.6.4 || 21.6.5: true
nx@21.6.0: false
Git 托管的包: 包名本身永远不会批准 git 或 tarball 依赖的构建 — 仅凭名称无法确定该构件。可以通过精确的解析路径(含提交)来批准,或者自 v11.11.0 起,通过其仓库 URL 来批准:
allowBuilds:
# 批准该仓库的任何提交
'foo@git+ssh://git@example.com/org/foo.git': true
# 仅批准这个确切的提交
'bar@git+https://github.com/org/bar.git#abc123': true
仓库形式使受信任的 git 依赖在分支更新后仍可继续运行构建脚本,无需为每个新提交重新批准。该键为包名后接 @ 与 git URL,且不带 #<ref> 后缀。匹配是精确的,所以同一仓库的 git+ssh:// 与 git+https:// URL 属于不同的键。
自 v11.19.0 起,仓库形式同样会批准 pnpm 以 tarball 形式下载而非克隆的 git 托管包 — 例如从 codeload.github.com 获取的 github: 依赖。无论 pnpm 是克隆仓库还是下载 tarball,foo@git+https://github.com/org/foo.git 条目都会批准 foo。 GitLab 与 Bitbucket 的 tarball 下载按同样方式匹配。按完整 tarball 依赖路径批准或拒绝某个具体的已解析提交,依然有效。
按包名的拒绝不受此限制:foo: false 会阻止 foo,无论它来自注册源还是 git。
默认行为: 未在 allowBuilds 中列出的软件包默认情况下是不允许的,并且将被视为未经审核的软件包。默认情况下会打印错误(strictDepBuilds 默认为 true)。如果将 strictDepBuilds 设置为 false,则会打印一条警告信息。
安装过程中,尚未在 allowBuilds 中列出的、具有被忽略的构建的依赖项会自动添加到 pnpm-workspace.yaml 中,并带有占位符值,因此您可以手动将其设置为 true 或 false。 pnpm add 和 pnpm approve-builds 的 --allow-build 标志也会将其条目写入此处。
从旧设置迁移
要自动迁移这些设置,请按照 从 v10 迁移到 v11 指南运行 pnpx codemod run pnpm-v10-to-v11。
v11 中已移除以下设置,并替换为 allowBuilds:onlyBuiltDependencies、onlyBuiltDependenciesFile、neverBuiltDependencies、ignoredBuiltDependencies 和 ignoreDependencies。
之前:
onlyBuiltDependencies:
- electron
neverBuiltDependencies:
- core-js
ignoredBuiltDependencies:
- esbuild
之后:
allowBuilds:
electron: true
core-js: false
esbuild: false
dangerouslyAllowAllBuilds#
添加于:v10.9.0
- 默认值: false
- 类型:Boolean
如果设置为 true,所有从依赖关系生成的脚本(例如preinstall, install)将自动运行,无需批准。
警告
此设置允许所有依赖项(包括传递依赖项)现在和将来运行安装脚本。即使你当前的依赖图看起来很安全:
- 未来的更新可能会引入新的、不受信任的依赖项。
- 现有的软件包可能会在后续版本中添加脚本。
- 软件包可能会被劫持或破坏并开始执行恶意代码。
为了获得最大程度的安全,只有当你充分了解风险并信任你所依赖的整个生态系统时才启用此功能。建议明确审查并允许构建。