Skip to main content

设置(.yarnrc.yml)

Yarnrc 文件(之所以这样命名是因为它们必须被称为 .yarnrc.yml)是你能够配置 Yarn 内部设置的唯一位置。虽然 Yarn 会自动在父目录中找到它们,但它们通常应保存在项目的根目录中(通常是你的存储库)。从 v2 开始,它们必须以有效的 Yaml 编写并具有正确的扩展名(简单地调用文件 .yarnrc 是不行的)。

可以在定义值时使用 ${NAME} 语法从设置定义中访问环境变量。默认情况下,Yarn 将要求变量存在,但可以使用 ${NAME-fallback}(如果未设置 NAME,则返回 fallback)或 ${NAME:-fallback}(如果未设置 NAME 或为空字符串,则返回 fallback)来关闭此功能。

最后,请注意,大多数设置也可以通过环境变量定义(至少对于较简单的设置;尚不支持数组和对象)。为此,只需在名称前加上前缀,然后以蛇形命名法书写:YARN_CACHE_FOLDER 将设置缓存文件夹(这些值将覆盖 RC 文件中可能已定义的任何值 - 请谨慎使用它们)。

cacheFolder

下载的软件包在系统中的存储路径。

它们将被规范化、压缩并以具有标准化名称的 zip 存档形式保存。缓存被认为相对安全,可以由多个项目共享,即使多个 Yarn 实例同时在不同的项目上运行。要设置全局缓存文件夹,你应该改用 enableGlobalCache

cacheFolder: "./.yarn/cache",

cacheMigrationMode

当 Yarn 检测到缓存条目已过期时应遵循的行为。

缓存条目是否过时取决于它是否已由早期版本的 Yarn 构建和校验,或者是否在不同的压缩设置下构建和校验。可能的行为是:

  • 如果是 required-only,它将继续按原样使用文件,除非生成它的版本明显太旧。
  • 如果是 match-spec,如果压缩级别发生变化,它还会重建文件。
  • 如果是 always(默认值),它将始终重新生成缓存文件,以便它们使用当前缓存版本。
cacheMigrationMode: "required-only" | "match-spec" | "always",

httpsCaFilePath

包含一个或多个证书颁发机构签名证书的文件路径。

httpsCaFilePath: "./exampleCA.pem",

changesetBaseRefs

当 Yarn 需要检测更改时,它会将你的分支与之进行比较的 git 引用列表。

支持 git 分支、标签和提交。默认配置将与 master、origin/master、upstream/master、main、origin/main 和 upper/main 进行比较。

"master",
"origin/master",
"upstream/master",
"main",
"origin/main",
"upstream/main",
],

changesetIgnorePatterns

将从更改检测中排除的文件 glob 模式数组。

与以下模式匹配的文件(就与项目根目录相比的相对路径而言)将被每个检查文件是否与基本引用相比发生变化的命令忽略(这包括 yarn version checkyarn workspaces foreach --since)。

"**/*.test.{js,ts}",
],

checksumBehavior

当 Yarn 检测到缓存条目的校验和与预期不同时应遵循的行为。

可能的行为是:

  • 如果是 throw(默认值),Yarn 将抛出异常。
  • 如果是 update,锁定文件将更新以匹配缓存的校验和。
  • 如果是 reset,缓存条目将被清除并重新获取。
  • 如果是 ignore,则不会发生任何事情,Yarn 将跳过检查。
checksumBehavior: "throw" | "update" | "ignore" | "reset",

cloneConcurrency

Yarn 将同时运行的 git clone 操作数量。

我们默认将其限制为 2 个并发克隆操作。

compressionLevel

用于 zip 存档的压缩级别

可能的值从 0 ("no compression, faster") 到 9 ("heavy compression, slower")。值 mixed9 的变体,如果 gzip 开销超过大小增益,则文件将以未压缩的形式存储。

默认值为 0,安装速度往往要快得多。建议使用零安装的项目保持这种方式,因为实验表明 Git 存储未压缩的包存档比 gzip 压缩的包存档更高效。

compressionLevel: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | "mixed",

constraintsPath

约束文件的路径。

这只对 Prolog 约束很重要,这些约束已被弃用。 JavaScript 约束将始终从 yarn.config.cjs 文件中读取。

constraintsPath: "./constraints.pro",

defaultLanguageName

当包不提供任何见解时应使用的默认语言模式。

这是一个内部配置设置,除非你真的知道自己在做什么,否则不应触碰它。

defaultProtocol

当依赖范围是纯 semver 范围时应使用的默认协议。

这是一个内部配置设置,除非你真的知道自己在做什么,否则不应触碰它。

defaultSemverRangePrefix

yarn add 和类似命令创建的 semver 范围中使用的默认前缀。

可能的值是 "^"(默认值)、"~"""

defaultSemverRangePrefix: "^" | "~" | "",

deferredVersionFolder

版本控制文件存储的文件夹。

deferredVersionFolder: "./.yarn/versions",

enableColors

定义是否允许在标准输出上使用颜色。

默认设置是检查终端功能,但你可以手动将其覆盖为 truefalse

enableConstraintsChecks

定义是否应在每次安装时运行约束。

如果为 true,Yarn 将在完成安装后立即运行你的约束。这可能有助于减少反馈循环延迟,因为它可以在 CI 报告错误之前很久就捕获错误。

enableGlobalCache

定义缓存是否应在所有本地项目之间共享。

如果为 true(默认值),Yarn 会将缓存文件存储到位于 globalFolder 内的文件夹中,而不是尊重 cacheFolder

enableHardenedMode

定义 Yarn 是否应尝试检查恶意更改。

如果为 true,Yarn 将查询远程注册表以验证锁文件内容是否与远程信息匹配。这些检查会使安装速度变慢,因此你只应在信任圈之外的用户管理的分支上运行它们。

Yarn 将自动

定义是否允许在标准输出上使用超链接。

默认设置是检查终端功能,但你可以手动将其覆盖为 truefalse

enableImmutableCache

定义是否允许从缓存中添加/删除文件。

如果为 true,Yarn 将拒绝以任何方式更改缓存,无论是添加文件还是删除文件,并且将中止安装而不是让这种情况发生。

enableImmutableInstalls

定义是否允许从锁定文件中添加/删除条目。

如果为 true(CI 上的默认值),Yarn 将拒绝以任何方式更改锁定文件,无论是添加新条目还是删除它们。其他文件可以通过 immutablePatterns 设置添加到清单中。

enableInlineBuilds

定义是否在终端内直接打印构建输出。

如果为 true(CI 环境中的默认值),Yarn 将直接在终端内打印构建输出,而不是将其缓冲在外部日志文件中。请注意,默认情况下,Yarn 将尝试在支持 CI 提供商上使用可折叠终端序列,以使输出更清晰。

enableInlineHunks

定义是否在终端内直接打印补丁块。

如果为 true,Yarn 将打印任何无法成功应用到终端的补丁部分(块)。

enableMessageNames

定义是否在每行打印内容前添加消息名称。

如果为 true,Yarn 将在大多数消息前加上适合搜索引擎的代码,如果你的终端允许,则支持超链接。

enableMirror

定义是否将本地缓存条目镜像到全局缓存中。

如果为 true(默认值),Yarn 将使用全局文件夹作为网络和实际缓存之间的间接路径。这仅在 enableGlobalCache 明确设置为 false 时才有用,否则无论如何缓存条目都会保留到全局缓存中。

enableNetwork

定义是否允许远程网络请求。

如果为 false,Yarn 将永远不会自己向网络触发任何请求,并且会抛出异常而不是让它发生。对于 CI 来说,这是一个非常有用的设置,它通常希望确保它们不会错误地从网络加载依赖。

enableOfflineMode

定义 Yarn 是否应专门从其缓存中读取包元数据

如果为 true,Yarn 将通过从其本地缓存中读取来替换任何网络请求 - 即使它们包含旧信息。这在没有网络访问的环境(火车、飞机等)上执行本地工作时非常有用,因为你至少可以利用过去在同一台机器上安装的软件包。

由于此设置会导致使用过时的数据,因此建议将其设置为当前会话的环境变量(通过在终端中运行 export YARN_ENABLE_OFFLINE_MODE=1)而不是将其添加到 .yarnrc.yml 文件中。

enableProgressBars

定义是否应显示动画进度条。

如果为 true(CI 环境之外的默认值),Yarn 将显示长时间运行事件的进度条。

enableScripts

如果为 false,Yarn 在安装项目时不会执行来自第三方包的 postinstall 脚本(工作区仍会看到它们的安装后脚本被评估,因为如果你在其中运行安装,它们被认为是安全的)。

请注意,你还可以使用 dependenciesMeta 在每个包的基础上禁用脚本,或者通过结合 enableScriptsdependenciesMeta 重新启用特定脚本。

enableStrictSsl

定义 SSL 错误是否应使请求失败。

如果为 false,SSL 证书错误将被忽略

enableTelemetry

定义是否应发送匿名遥测数据。

如果为 true(CI 环境之外的默认值),Yarn 将定期向我们的服务器发送匿名数据,跟踪一些使用信息,例如项目中的依赖数量、运行的安装次数等。

有关此过程的更多详细信息,请参阅 Telemetry 页面。

enableTimers

定义是否打印运行每个子步骤所花费的时间。

如果为 false,Yarn 在运行各种命令时不会打印运行每个子步骤所花费的时间。这仅用于测试目的,当你希望每次执行的输出与前一次执行完全相同时。

enableTransparentWorkspaces

定义纯 semver 范围是否应允许工作区解析。

如果为 false,Yarn 不会仅仅因为工作区的版本恰好与 semver 范围匹配而链接工作区。禁用此设置将要求所有工作区使用显式 workspace: 协议相互引用。

通常仅当你的项目需要使用已发布的版本来构建新版本时才需要此设置(例如 Babel 的情况,它依赖于最新的稳定版本来构建未来的版本)。

globalFolder

存储系统全局所有文件的路径。

我们将在那里存储各种文件:全局缓存、元数据缓存……

globalFolder: "${HOME}/.yarn/berry",

httpProxy

触发 HTTP 请求时使用的代理。

目前仅支持 HTTP 代理。

httpProxy: "http://proxy:4040",

httpRetry

在重试失败的 HTTP 请求之前等待的时间(以秒为单位)。

httpTimeout

取消待处理的 HTTP 请求之前等待的时间(以毫秒为单位)。

httpTimeout: 60000,

httpsCertFilePath

包含 PEM 格式证书链的文件路径。

httpsCertFilePath: "./exampleCert.pem",

httpsKeyFilePath

包含 PEM 格式私钥的文件路径。

httpsKeyFilePath: "./exampleKey.pem",

httpsProxy

定义触发 HTTPS 请求时要使用的代理。

目前仅支持 HTTP 代理。

httpsProxy: "http://proxy:4040",

ignorePath

定义是否应尊重 yarnPath

如果为 true,则无论执行什么版本的 Yarn 都将继续运行,而不是查看 yarnPath 的值来决定。

ignorePath: false,

immutablePatterns

如果设置了 enableImmutableInstalls,则不允许更改其内容的文件模式数组。

"**/.pnp.*",
],

initScope

通过 init 命令创建软件包时使用的范围。

initScope: "yarnpkg",

initFields

通过 init 命令创建包时要设置的其他字段。

homepage: "https://yarnpkg.com",
},

injectEnvironmentFiles

将注入 Yarn 生成的任何子进程的 .env 文件数组。

默认情况下,Yarn 将自动注入存储在 .env.yarn 文件中的变量,但你可以使用此设置更改此行为。

请注意,在路径末尾添加问号将消除文件丢失时 Yarn 抛出的错误,这在声明本地配置文件时可能会派上用场。

".my-env",
".my-local-env?",
],

installStatePath

安装状态将保留的路径。

安装状态文件包含一堆有关项目的缓存信息。它仅用于优化目的,如果缺失,将重新创建(你无需将其添加到 Git)。

installStatePath: "./.yarn/install-state.gz",

logFilters

更改触发消息的日志级别。

这可用于隐藏特定消息,或使它们更突出。在那里定义的规则接受按名称或原始内容过滤消息。

logFilters.code

匹配具有给定代码的所有消息。

code: "YN0006",

logFilters.level

应用于匹配消息的新日志级别。如果你希望完全隐藏这些消息,请使用 discard

level: "info" | "warning" | "error" | "discard",
}, {

logFilters.text

匹配内容严格等于给定文本的消息。

如果消息同时匹配基于 code 和基于 text 的过滤器,则基于 text 的过滤器将优先于基于 code 的过滤器。

text: "lorem-ipsum@npm:1.2.3 lists build scripts, but its build has been explicitly disabled through configuration",

logFilters.level

应用于匹配消息的新日志级别。如果你希望完全隐藏这些消息,请使用 discard

level: "info" | "warning" | "error" | "discard",
}, {

logFilters.pattern

匹配内容与给定 glob 模式匹配的消息。

如果消息同时匹配基于 pattern 和基于 code 的过滤器,则基于 pattern 的过滤器将优先于其他过滤器。可以使用 text 过滤器逐个覆盖模式,该过滤器优先于 pattern

pattern: "lorem-ipsum@* lists build scripts, but its build has been explicitly disabled through configuration",

logFilters.level

应用于匹配消息的新日志级别。如果你希望完全隐藏这些消息,请使用 discard

level: "info" | "warning" | "error" | "discard",
}],

networkConcurrency

允许同时运行的 HTTP 请求数量。

我们默认为 50 个并发请求,但在无法处理大量流量的代理后面工作时可能需要对其进行更多限制。

nmHoistingLimits

可以提升包的最高点。

替换以前的 nohoist 设置。可能的值包括:

  • 如果是 none(默认值),则包将按照通常的规则提升。
  • 如果是 workspaces,则包不会提升到依赖于它们的工作区。
  • 如果是 dependencies,传递依赖也不会提升到直接依赖。

可以使用 installConfig.hoistingLimits 字段在每个工作区中覆盖此设置。

nmHoistingLimits: "workspaces" | "dependencies" | "none",

nmSelfReferences

定义工作区是否允许自己要求。

如果为 false,Yarn 在使用 nodeLinker: node-modules 时不会创建自引用符号链接。可以使用 installConfig.selfReferences 字段在每个工作区上覆盖此设置。

nmMode

定义如何将文件复制到目标位置。

可能的值有:

  • 如果是 classic,则执行常规复制或克隆操作。
  • 如果是 hardlinks-global,则将使用到全局内容可寻址存储的硬链接。
  • 如果是 hardlinks-local,则仅在同一项目的类似包之间创建硬链接。

为了与生态系统兼容,默认值为 classic

nmMode: "classic" | "hardlinks-local" | "hardlinks-global",

nodeLinker

定义应如何安装 Node 包。

根据 nodeLinker 设置,Yarn 支持三种安装项目依赖的方式。可能的值是:

  • 如果是 pnp,则将生成单个 Node.js 加载器文件。
  • 如果是 pnpm,则将使用符号链接和硬链接到全局内容可寻址存储来创建 node-modules
  • 如果是 node-modules,则将创建一个常规 node_modules 文件夹,就像在 Yarn Classic 或 npm 中一样。
nodeLinker: "pnp",

winLinkType

定义在 Windows 上创建链接时是否使用连接或符号链接。

可能的值是:

  • 如果是 junctions,Yarn 在将工作区链接到 node_modules 目录时将使用 Windows 连接点,这些目录始终是绝对路径。
  • 如果是 symlinks,Yarn 将使用符号链接,它将使用相对路径,并且与 Yarn 在非 Windows 平台上的行为一致。

符号链接是首选,但它们要求运行 Yarn 的 Windows 用户具有 create symbolic links 权限。因此,我们默认使用连接点。

winLinkType: "junctions" | "symlinks",

npmAlwaysAuth

定义查询 npm 注册表时是否始终发送身份验证凭据。

如果为 true,则在向注册表发送请求时将始终发送身份验证凭据。除非你将注册表配置为引用私有 npm 镜像,否则不需要这样做。

npmAuditRegistry

定义审核依赖时要使用的注册表。

如果未明确设置,将使用 npmRegistryServer 的值。

npmAuditRegistry: "https://registry.npmjs.org",

npmAuthIdent

定义访问注册表时默认使用的身份验证凭据。

替换以前的 _auth 设置。因为它需要在配置中存储未加密的值,所以尽可能优先使用 npmAuthToken

npmAuthIdent: "username:password",

npmAuthToken

定义访问注册表时默认使用的身份验证令牌。

替换以前的 _authToken 设置。如果你使用 npmScopes 定义多个注册表,npmRegistries 字典允许你根据每个注册表覆盖这些凭据。

npmAuthToken: "ffffffff-ffff-ffff-ffff-ffffffffffff",

npmPublishAccess

定义将包发布到 npm 注册表时要使用的默认访问权限。

有效值为 publicrestricted,但 restricted 通常需要注册付费计划(这取决于你使用的注册表)。可以使用 publishConfig.access 字段在每个包的基础上进行覆盖。

npmPublishAccess: "public" | "restricted",

npmAuditExcludePackages

要从 yarn npm audit 中排除的包名 glob 模式数组。

npmAuditIgnoreAdvisories

要从 yarn npm audit 结果中忽略的建议 ID glob 模式数组。

npmPublishRegistry

定义推送包时要使用的注册表。

如果未明确设置,将使用 npmRegistryServer 的值。由 publishConfig.registry 覆盖。

npmPublishRegistry: "https://npm.pkg.github.com",

npmRegistryServer

定义获取包时要使用的注册表。

如果你想为不同的范围定义不同的注册表,请参阅 npmScopes。要为你的服务器定义身份验证方案,请参阅 npmAuthToken。该 URL 默认必须使用 HTTPS,但可以通过将其添加到 unsafeHttpWhitelist 来更改。

npmRegistryServer: "https://registry.yarnpkg.com",

packageExtensions

扩展依赖的包定义;有助于修复第三方问题。

某些软件包的依赖可能指定不正确 - 例如缺少一个依赖,导致 Yarn 拒绝其访问。packageExtensions 字段提供了一种使用附加信息扩展现有软件包定义的方法。如果你使用它,请考虑向上游发送 PR 并将你的扩展贡献给 plugin-compat database

注意:此字段用于添加依赖;如果你需要重写现有的依赖,请选择 resolutions 字段。

lodash: "^4.15.0",
},
},
optional: true,
},
},
},
},

patchFolder

补丁文件将被写入的文件夹。

patchFolder: "./.yarn/patches",

pnpEnableEsmLoader

定义是否生成 Node.js ESM 加载器。

如果为 true,Yarn 将在 CJS 加载器之上生成一个实验性的 ESM 加载器(.pnp.loader.mjs)。

pnpEnableInlining

定义是否将 PnP 数据存储在生成的文件中。

如果为 false,Yarn 将生成额外的 .pnp.data.json 文件。

pnpFallbackMode

定义是否允许包依赖内置的 PnP 后备机制。

可能的值有:

  • 如果是 all,则所有包都可以访问后备中提供的依赖。
  • 如果是 dependencies-only(默认值),则依赖可以访问它们,但不能访问你的工作区。
  • 如果是 none,则任何包都无法访问它们。
pnpFallbackMode: "none" | "dependencies-only" | "all",

pnpIgnorePatterns

应强制使用默认 CommonJS 解析的文件 glob 模式数组。

与这些位置匹配的文件将不会被 PnP 覆盖,并将使用常规 Node.js 解析算法。通常仅在你拥有尚未成为工作区树一部分的子项目时才需要。

"./subdir/*",
],

pnpMode

定义是否尝试模拟传统的 node_modules 提升。

可能的值是:

  • 如果是 strict(默认值),模块将不允许依赖它们未在其自身依赖中明确列出的包。
  • 如果是 loose,则允许包访问在 1.x 安装下已提升到顶层的任何其他包。

请注意,即使在松散模式下,提升的 require 调用也是不安全的,应不鼓励使用。

pnpMode: "strict" | "loose",

pnpShebang

添加到生成的 PnP 加载器的字符串。

pnpShebang: "#!/usr/bin/env node",

pnpUnpluggedFolder

未插入软件包的存储路径。

虽然 Yarn 尝试直接从其 zip 存档中引用和加载包,但这可能并不总是可行的。在这些情况下,Yarn 会将文件提取到未插入的文件夹中。

pnpUnpluggedFolder: "./.yarn/unplugged",

preferDeferredVersions

定义是否默认使用延迟版本控制。

如果为 true,则在运行 yarn version 系列命令时默认延迟版本控制。

preferInteractive

定义是否默认使用交互式提示。

如果为 true,当某些操作可以通过消除歧义来改进时,Yarn 会寻求你的指导。启用此设置还会解锁某些功能(例如,yarn add 命令将建议重用与其他工作区相同的依赖(如果相关)。

preferReuse

定义在向包添加依赖时是否重用最常见的依赖范围。

如果为 true,yarn add 将尝试重用其他工作区中最常见的依赖范围。

preferReuse: false,

preferTruncatedLines

定义是否截断超出终端大小的行。

如果为 true,Yarn 将截断超出终端大小的行。如果禁用进度条,行将永远不会被截断。

progressBarStyle

要使用的进度条样式。

progressBarStyle: "patrick" | "simba" | "jack" | "hogsfather" | "default",

supportedArchitectures

Yarn 应为其安装软件包的系统。

supportedArchitectures.os

要涵盖的操作系统列表。

os: [
"current",
"darwin",
"linux",
"win32",
],

supportedArchitectures.cpu

要涵盖的 CPU 架构列表。

See https://nodejs.org/docs/latest/api/process.html#processarch for the architectures supported by Node.js

cpu: [
"current",
"x64",
"ia32",
"arm64",
],

supportedArchitectures.libc

要涵盖的标准 C 库列表。

libc: [
"current",
"glibc",
"musl",
],
},

taskPoolConcurrency

并发重任务处理的最大数量。

我们默认使用平台并行性,但对于某些 CI,os.cpus 可能不会报告准确的值并可能使其容器不堪重负。

taskPoolConcurrency: "os.availableParallelism()",

taskPoolMode

繁重任务的执行策略。

默认情况下,在执行繁重任务(例如将 tgz 文件转换为 zip)时将使用工作程序。此设置可用于禁用工作者并使用常规线程内异步处理。

taskPoolMode: "async" | "workers",

telemetryInterval

定义两个遥测事件之间的最短时间(以天为单位)。

默认情况下,我们每周只发送一个请求,因此我们无法以较低的粒度跟踪你的使用情况。

telemetryUserId

用户定义的唯一 ID,与遥测事件一起发送。

默认设置从不为任何人分配唯一 ID,因此我们无法知道哪些数据来自哪个项目。此设置可用于强制将用户 ID 发送到我们的遥测服务器。

坦率地说,它只在某些非常特殊的用例中有用。例如,我们在 Yarn 存储库上使用它,以便从公共仪表板中排除我们自己的使用情况(因为我们在这里运行 Yarn 的频率远高于其他任何地方,因此生成的数据会有偏差)。

telemetryUserId: "yarnpkg/berry",

tsEnableAutoTypes

定义是否自动安装 @types 依赖。

如果为 true,当使用不提供自己类型的包运行 yarn add 时,Yarn 将自动添加 @types 依赖(如 Algolia npm 数据库所报告)。如果你的项目根目录或当前工作区中有一个 tsconfig.json 文件,则默认启用此行为。

unsafeHttpWhitelist

允许使用 HTTP 协议的主机名 glob 模式数组。

"*.example.org",
"example.org",
],

virtualFolder

虚拟软件包的存储路径。

由于 Yarn 安装列出对等依赖的包的方式的特殊性,一些包将映射到文件系统上实际上不存在的多个虚拟目录。此设置告诉 Yarn 将它们放在哪里。请注意,文件夹名称必须为 __virtual__

virtualFolder: "./.yarn/__virtual__",

yarnPath

要使用的 Yarn 二进制文件的路径,而不是全局路径。

对于 rc 文件涵盖的目录中运行的任何命令,将执行此二进制文件而不是任何其他二进制文件(包括全局二进制文件)。如果文件扩展名以 .js 结尾,则需要它,否则将生成它。

yarnPath 设置曾经是项目内安装 Yarn 的首选方式,但现在我们建议在大多数情况下使用 Corepack

yarnPath: "./scripts/yarn-2.0.0-rc001.js",