设置(.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
。
cacheMigrationMode
当 Yarn 检测到缓存条目已过时时应遵循的行为。
缓存条目是否过时取决于它是否已由 Yarn 的早期版本构建并进行校验和,或者在不同的压缩设置下构建。可能的的行为是
- 如果为
required-only
,它将按原样继续使用该文件,除非生成它的版本明显太旧。 - 如果为
match-spec
,如果压缩级别已更改,它还将重建文件。 - 如果为
always
(默认值),它将始终重新生成缓存文件,以便它们使用当前缓存版本。
httpsCaFilePath
指向包含一个或多个证书颁发机构签名证书的文件的路径。
changesetBaseRefs
Yarn 需要检测更改时将与您的分支进行比较的 git 引用列表。
支持 git 分支、标签和提交。默认配置将与 master、origin/master、upstream/master、main、origin/main 和 upstream/main 进行比较。
changesetIgnorePatterns
将从变更检测中排除的文件 glob 模式数组。
与项目根目录相比,匹配以下模式(相对于路径)的文件将被每个检查文件是否与基本引用相比发生更改的命令忽略(包括 yarn version check
和 yarn workspaces foreach --since
)。
checksumBehavior
Yarn 在检测到缓存项的校验和与预期不同时应遵循的行为。
可能的行为是
- 如果为
throw
(默认值),Yarn 将抛出异常。 - 如果为
update
,则将更新锁定文件以匹配缓存的校验和。 - 如果为
reset
,则将清除缓存项并重新获取。 - 如果为
ignore
,则不会发生任何事情,Yarn 将跳过检查。
cloneConcurrency
Yarn 将同时运行的 git clone
操作数量。
我们默认将其限制为 2 个并发克隆操作。
compressionLevel
用于 zip 存档的压缩级别
可能的值从 0
(“无压缩,更快”)到 9
(“重度压缩,更慢”)。值 mixed
是 9
的一个变体,其中如果 gzip 开销超过大小增益,则文件将存储为未压缩状态。
默认值为 0
,这往往可以显著加快安装速度。建议使用零安装的项目保持这种方式,因为实验表明 Git 存储未压缩的包存档比 gzip 压缩的包存档更有效率。
constraintsPath
约束文件路径。
这仅适用于 Prolog 约束,这些约束已弃用。JavaScript 约束将始终从 yarn.config.cjs
文件中读取。
defaultLanguageName
当包没有任何见解时,应使用的默认语言模式。
这是一个内部配置设置,除非您真的知道自己在做什么,否则不应触及它。
defaultProtocol
当依赖项范围是纯 semver 范围时,应使用的默认协议。
这是一个内部配置设置,除非您真的知道自己在做什么,否则不应触及它。
defaultSemverRangePrefix
yarn add
和类似命令创建的 semver 范围中使用的默认前缀。
可能的值是 "^"
(默认值)、"~"
或 ""
。
deferredVersionFolder
存储版本文件所在的文件夹。
enableColors
定义是否允许在标准输出中使用颜色。
默认情况下是检查终端功能,但您可以手动将其覆盖为 true
或 false
。
enableConstraintsChecks
定义是否应在每次安装时运行约束。
如果为真,Yarn 将在完成安装后立即运行约束。这可能有助于缩短反馈循环延迟,因为在 CI 甚至报告错误之前就捕获了错误。
enableGlobalCache
定义是否应在所有本地项目之间共享缓存。
如果为真(默认值),Yarn 将把缓存文件存储到位于 globalFolder
中的文件夹中,而不是遵循 cacheFolder
。
enableHardenedMode
定义 Yarn 是否应尝试检查恶意更改。
如果为真,Yarn 将查询远程注册表以验证锁定文件内容是否与远程信息匹配。这些检查会使安装速度变慢,因此你只应在不受信任圈子以外的用户管理的分支上运行这些检查。
Yarn 将自动在公共存储库的 GitHub 拉取请求中启用强化模式。如果你想禁用它,请在 yarnrc 文件中将其显式设置为 false
。
enableHyperlinks
定义是否允许在标准输出上使用超链接。
默认情况下是检查终端功能,但您可以手动将其覆盖为 true
或 false
。
enableImmutableCache
定义是否允许向缓存中添加/删除文件。
如果为真,Yarn 将拒绝以任何方式更改缓存,无论是要添加文件还是删除文件,并且将中止安装而不是允许发生这种情况。
enableImmutableInstalls
定义是否允许向 lockfile 添加/移除条目。
如果为 true(CI 上的默认值),Yarn 将拒绝以任何方式更改 lockfile,无论是要添加新条目还是移除它们。可以通过 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
脚本(工作空间仍会看到其 postinstall 脚本被评估,因为如果你在其中运行安装,则假定它们是安全的)。
请注意,你还可以使用 dependenciesMeta
在每个包的基础上禁用脚本,或者通过组合 enableScripts
和 dependenciesMeta
重新启用特定脚本。
enableStrictSsl
定义 SSL 错误是否应导致请求失败。
如果为 false,将忽略 SSL 证书错误
enableTelemetry
定义是否应发送匿名遥测数据。
如果为 true(CI 环境之外的默认值),Yarn 将定期向我们的服务器发送匿名数据,跟踪一些使用信息,例如项目中的依赖项数量、运行的安装数量等。
有关此过程的更多详细信息,请参阅遥测页面。
enableTimers
定义是否打印运行每个子步骤所花费的时间。
如果为 false,Yarn 在运行各种命令时不会打印运行每个子步骤所花费的时间。这仅在测试目的时需要,当您希望每个执行与前一个执行具有完全相同的输出时。
enableTransparentWorkspaces
定义纯 semver 范围是否应允许工作区解析。
如果为 false,Yarn 不会仅因为版本碰巧匹配 semver 范围而链接工作区。禁用此设置将要求所有工作区使用显式 workspace:
协议相互引用。
通常仅在项目需要使用已发布版本才能构建新版本时才需要此设置(例如,Babel 依赖于最新的稳定版本来构建未来版本)。
globalFolder
将存储所有全局文件的系统路径。
各种文件将存储在那里:全局缓存、元数据缓存,...
httpProxy
在发出 HTTP 请求时要使用的代理。
目前仅支持 HTTP 代理。
httpRetry
在重试失败的 HTTP 请求之前等待的时间(以秒为单位)。
httpTimeout
在取消待处理的 HTTP 请求之前等待的时间(以毫秒为单位)。
httpsCertFilePath
指向包含 PEM 格式证书链的文件的路径。
httpsKeyFilePath
指向包含 PEM 格式私钥的文件的路径。
httpsProxy
在发出 HTTPS 请求时要使用的代理。
目前仅支持 HTTP 代理。
ignorePath
定义是否应遵循 yarnPath
。
如果为 true,则将继续运行正在执行的 Yarn 版本,而不是查看 yarnPath
的值来决定。
immutablePatterns
如果设置了 enableImmutableInstalls
,则内容不允许更改的文件模式数组。
initScope
通过 init
命令创建包时使用的范围。
initFields
通过 init
命令创建包时要设置的其他字段。
injectEnvironmentFiles
将注入到 Yarn 生成的任何子进程中的 .env 文件数组。
默认情况下,Yarn 会自动注入存储在 .env.yarn
文件中的变量,但你可以使用此设置来更改此行为。
请注意,在路径末尾添加问号将使 Yarn 在文件丢失时抛出的错误静默,这在声明本地配置文件时可能派上用场。
installStatePath
将保留安装状态的路径。
安装状态文件包含有关你的项目的大量缓存信息。它仅用于优化目的,如果丢失将被重新创建(你无需将其添加到 Git)。
logFilters
更改已发出消息的日志级别。
这可用于隐藏特定消息,或使它们更突出。此处定义的规则接受按名称或原始内容过滤消息。
logFilters.code
匹配具有给定代码的所有消息。
logFilters.level
应用于匹配消息的新日志级别。如果你希望完全隐藏这些消息,请使用discard
。
logFilters.text
匹配内容严格等于给定文本的消息。
如果一条消息同时匹配基于code
和基于text
的过滤器,则基于text
的过滤器将优先于基于code
的过滤器。
logFilters.level
应用于匹配消息的新日志级别。如果你希望完全隐藏这些消息,请使用discard
。
logFilters.pattern
匹配其内容与给定 glob 模式匹配的消息。
如果一条消息同时匹配基于pattern
和基于code
的过滤器,则基于pattern
的过滤器将优先于其他过滤器。模式可以通过使用优先于pattern
的text
过滤器逐个覆盖。
logFilters.level
应用于匹配消息的新日志级别。如果你希望完全隐藏这些消息,请使用discard
。
networkConcurrency
允许同时运行的 HTTP 请求数量。
我们默认 50 个并发请求,但在通过无法处理大量流量的代理工作时可能需要进一步限制它。
networkSettings
每个主机名的其他网络设置
nmHoistingLimits
可以提升包的最高点。
替换之前的 nohoist
设置。可能的值为
- 如果为
none
(默认值),则按照常规规则提升包。 - 如果为
workspaces
,则不会提升包超过依赖它们的 workspace。 - 如果为
dependencies
,则传递依赖项也不会提升超过直接依赖项。
可以使用 installConfig.hoistingLimits
字段按每个 workspace 覆盖此设置。
nmSelfReferences
定义工作区是否允许引用自身。
如果为 false,Yarn 在使用 nodeLinker: node-modules
时不会创建自引用符号链接。可以使用 installConfig.selfReferences
字段按每个工作区覆盖此设置。
nmMode
定义如何将文件复制到其目标位置。
可能的值是
- 如果为
classic
,则执行常规复制或克隆操作。 - 如果为
hardlinks-global
,则将使用到全局内容可寻址存储的硬链接。 - 如果为
hardlinks-local
,则仅在来自同一项目的相似包之间创建硬链接。
为了与生态系统兼容,默认值为 classic
。
nodeLinker
定义如何安装 Node 包。
Yarn 支持三种方式来安装项目的依赖项,具体取决于 nodeLinker
设置。可能的值是
- 如果为
pnp
,则将生成一个 Node.js 加载器文件。 - 如果为
pnpm
,则将使用到全局内容可寻址存储的符号链接和硬链接创建node-modules
。 - 如果为
node-modules
,则将创建与 Yarn Classic 或 npm 中一样的常规node_modules
文件夹。
winLinkType
定义在 Windows 上创建链接时是否使用交界处或符号链接。
可能的值是
- 如果为
junctions
,则 Yarn 在将工作区链接到node_modules
目录(始终是绝对路径)时将使用 Windows 交界处。 - 如果为
symlinks
,则 Yarn 将使用符号链接,它将使用相对路径,并且与 Yarn 在非 Windows 平台上的行为一致。
符号链接是首选,但它们要求运行 Yarn 的 Windows 用户具有 创建符号链接
权限。因此,我们默认使用交界处。
npmAlwaysAuth
定义是否在查询 npm 注册表时始终发送身份验证凭据。
如果为 true,则在向注册表发送请求时始终发送身份验证凭据。除非你将注册表配置为引用私有 npm 镜像,否则不应该需要这样做。
npmAuditRegistry
定义在审计依赖项时要使用的注册表。
如果没有明确设置,将使用 npmRegistryServer
的值。
npmAuthIdent
定义在访问注册表时默认使用的身份验证凭据。
替换以前的 _auth
设置。由于它需要在配置中存储未加密的值,因此在可能的情况下应优先使用 npmAuthToken
。
npmAuthToken
定义在访问注册表时默认使用的身份验证令牌。
替换以前的 _authToken
设置。如果你使用 npmScopes
定义多个注册表,则 npmRegistries
字典允许你按每个注册表覆盖这些凭据。
npmPublishAccess
定义在将包发布到 npm 注册表时要使用的默认访问权限。
有效值是 public
和 restricted
,但 restricted
通常需要注册付费计划(这取决于你使用的注册表)。可以使用 publishConfig.access
字段按每个包覆盖。
npmAuditExcludePackages
从 yarn npm audit
中排除的包的建议 ID 全局模式数组。
npmAuditIgnoreAdvisories
要从yarn npm audit
结果中忽略的建议 ID 全局模式数组。
npmPublishRegistry
定义推送包时要使用的注册表。
如果没有明确设置,将使用npmRegistryServer
的值。被publishConfig.registry
覆盖。
npmRegistries
每个注册表的配置。
npmRegistryServer
定义获取包时要使用的注册表。
如果您想为不同的范围定义不同的注册表,请参见npmScopes
。要为您的服务器定义身份验证方案,请参见npmAuthToken
。默认情况下,URL 必须使用 HTTPS,但可以通过将其添加到unsafeHttpWhitelist
来更改此设置。
npmScopes
每个范围的注册表配置。
packageExtensions
扩展依赖项的包定义;可用于修复第三方问题。
某些包可能在依赖项方面指定不正确 - 例如缺少一个依赖项,导致 Yarn 拒绝访问。packageExtensions
字段提供了一种使用附加信息扩展现有包定义的方法。如果您使用它,请考虑发送 PR 上游并向 plugin-compat
数据库提交您的扩展。
注意:此字段用于添加依赖项;如果您需要重写现有依赖项,则优先使用 resolutions
字段。
patchFolder
将写入补丁文件到的文件夹。
pnpEnableEsmLoader
定义是否生成 Node.js ESM 加载器。
如果为 true,Yarn 将在 CJS 之上生成一个实验性 ESM 加载器 (.pnp.loader.mjs
)。
pnpEnableInlining
定义是否将 PnP 数据存储在生成的文件中。
如果为 false,Yarn 将生成一个额外的 .pnp.data.json
文件。
pnpFallbackMode
定义是否允许包依赖于内置 PnP 回退机制。
可能的值是
- 如果为
all
,所有包都可以访问回退中提供的依赖项。 - 如果为
dependencies-only
(默认值),依赖项将可以访问它们,但您的工作空间不能访问。 - 如果为
none
,没有包可以访问它们。
pnpIgnorePatterns
应强制使用默认 CommonJS 解析的文件 glob 模式数组。
与这些位置匹配的文件不会被 PnP 覆盖,并将使用常规 Node.js 解析算法。通常仅在您有尚未成为工作空间树一部分的子项目时才需要。
pnpMode
定义是否尝试模拟传统的 node_modules
提升。
可能的值是
- 如果为
strict
(默认值),则不允许模块要求它们在自己的依赖项中未明确列出的包。 - 如果为
loose
,则允许包访问任何其他包,这些包在 1.x 安装下会提升到顶级。
请注意,即使在宽松模式下,提升的 require 调用也是不安全的,应该避免使用。
pnpShebang
添加到生成的 PnP 加载器之前字符串。
pnpUnpluggedFolder
存储未连接包的路径。
虽然 Yarn 尝试直接从其 zip 存档中引用和加载包,但这可能并不总是可行的。在这些情况下,Yarn 会将文件解压缩到未连接文件夹中。
preferDeferredVersions
定义是否默认使用延迟版本控制。
如果为 true,则在运行 yarn version
系列命令时默认延迟版本控制。
preferInteractive
定义是否默认使用交互式提示。
如果为真,Yarn 会在某些操作可以通过消除歧义得到改善时征求你的指导。启用此设置还会解锁一些功能(例如,yarn add
命令会在相关时建议重复使用其他工作空间中的相同依赖项)。
preferReuse
定义在向包添加依赖项时是否重复使用最常见的依赖项范围。
如果为真,yarn add
将尝试重复使用其他工作空间中最常见的依赖项范围。
preferTruncatedLines
定义是否截断超出终端大小的行。
如果为真,Yarn 将截断超出终端大小的行。如果禁用进度条,则永远不会截断行。
progressBarStyle
要使用的进度条样式。
supportedArchitectures
Yarn 应为其安装包的系统。
supportedArchitectures.os
要涵盖的操作系统列表。
supportedArchitectures.cpu
要涵盖的 CPU 架构列表。
请参阅 https://node.org.cn/docs/latest/api/process.html#processarch 了解 Node.js 支持的架构
supportedArchitectures.libc
要涵盖的标准 C 库列表。
taskPoolConcurrency
并发处理繁重任务的最大数量。
我们默认为平台并行性,但对于某些 CI,os.cpus
可能无法报告准确的值,并可能压垮其容器。
workerPoolMode
繁重任务的执行策略。
默认情况下,在执行繁重任务(例如将 tgz 文件转换为 zip)时将使用工作进程。此设置可用于禁用工作进程并使用常规的线程内异步处理。
telemetryInterval
定义两次遥测事件之间的最短时间(以天为单位)。
默认情况下,我们每周只发送一个请求,这使得我们无法以更低的粒度跟踪你的使用情况。
telemetryUserId
用户定义的唯一 ID,与遥测事件一起发送。
默认设置永远不会向任何人分配唯一 ID,因此我们无法知道哪些数据来自哪个项目。此设置可用于强制将用户 ID 发送到我们的遥测服务器。
坦率地说,它仅在一些非常特定的用例中才有用。例如,我们在 Yarn 存储库中使用它,以便从公共仪表板中排除我们自己的使用情况(由于我们在这里运行 Yarn 的频率远高于其他任何地方,因此生成的数据会有偏差)。
tsEnableAutoTypes
定义是否自动安装 @types 依赖项。
如果为 true,则 Yarn 将在使用不提供自身类型的软件包(如 Algolia npm 数据库所报告)运行 `yarn add` 时自动添加 @types
依赖项。如果您在项目的根目录或当前工作区中有一个 tsconfig.json 文件,则默认启用此行为。
unsafeHttpWhitelist
允许使用 HTTP 协议的主机名 glob 模式数组。
virtualFolder
存储虚拟软件包的路径。
由于 Yarn 安装列出对等依赖项的软件包的方式的特殊性,一些软件包将被映射到多个实际上不存在于文件系统中的虚拟目录。此设置告诉 Yarn 将它们放在哪里。请注意,文件夹名称必须为 __virtual__
。
yarnPath
要使用的 Yarn 二进制文件的路径,而不是全局路径。
此二进制文件将代替任何其他二进制文件(包括全局二进制文件)执行,用于在 rc 文件覆盖的目录中运行的任何命令。如果文件扩展名以 .js
结尾,则需要它,并且在任何其他情况下都会生成它。
yarnPath
设置曾经是在项目中安装 Yarn 的首选方式,但我们现在建议在大多数情况下使用 Corepack。