跳过主要内容

清单 (package.json)

清单文件(也称为 package.json,因为这是它们的文件名)包含描述一个特定包的唯一设置所需的一切。如果项目使用工作区功能,则项目将包含多个此类清单,因为每个工作区都通过其自己的清单进行描述。请注意,可以通过 initFields 设置为这些字段设置默认值。

name

包的名称。

用于在整个应用程序中识别它,尤其是在多个工作区之间。名称的第一部分(此处为 @scope/)是可选的,用作命名空间)。

name: "@scope/name",

version

包的版本。

通常不会对项目产生任何影响,除非它是工作区 - 那么它的版本必须与指定范围匹配,才能选择工作区作为解析候选。

version: "1.2.3",

packageManager

定义在处理此项目时应使用的包管理器。

此字段由 Corepack 和类似工具用于检测项目中使用的 Yarn 版本 - 从某种意义上说,它与你的锁定文件具有相同目的,但仅适用于 Yarn 本身。

运行 yarn set version 时,Yarn 将自动设置此值。

type

定义应如何解释 .js 文件。

Node.js v13.x 选项。可能的值为 commonjs(默认值)和 module。无论此选项如何,Yarn 3+ 在使用 PnP 时都会生成一个 .pnp.cjs 文件。

类型: "commonjs" | "module",

私有

定义包是否要发布。

如果为真,则包被视为私有,Yarn 将拒绝发布它,无论情况如何。

私有: ,

许可证

定义包分发许可证的 SPDX 标识符。

许可证: "MIT",

操作系统

此包可运行的一组平台。

process.platform() 的值将在安装时与此组进行比较。如果找不到匹配项,则包定义的任何 postinstall 脚本都将被跳过。如果包仅通过 optionalDependencies 项依赖,则根本不会安装该包。

"linux",
"darwin",
"win32",
],

CPU

此包可运行的一组 CPU 架构。

process.arch() 的值将在安装时与此组进行比较。如果找不到匹配项,则包定义的任何 postinstall 脚本都将被跳过。如果包仅通过 optionalDependencies 项依赖,则根本不会安装该包。

CPU: [
"x64",
"ia32",
"arm64",
],

libc

此包依赖的一组 C 标准库。

主机标准库将在安装时与此组进行比较。如果找不到匹配项,则包定义的任何 postinstall 脚本都将被跳过。如果包仅通过 optionalDependencies 项依赖,则根本不会安装该包。

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

通过裸标识符请求包时应解析的文件路径。

此字段可以通过使用 publishConfig.main 字段在发布时进行修改。

main: "./sources/index.js",

module

在与 ES6 兼容的打包器环境中通过裸标识符请求包时应解析的文件路径。

此字段应被视为已弃用,exports 是其官方替代项。

module: "./sources/index.mjs",

languageName

选择在安装依赖项时要使用的链接器的任意值。

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

languageName: "node",

bin

通过 yarn run bin-name 和 shell 环境公开的文件集。

如果设置为字符串,则二进制值将是包名称(不包括其作用域部分)。

bin: {
my-bin: "./dist/my-bin.js",
},

scripts

通过 yarn run script-name 或作为生命周期钩子公开的脚本集。

Yarn 中的脚本由类 POSIX 的 shell 执行,该 shell 实现了大多数你希望在一行脚本中使用的功能。例如,你可以使用 POSIX 语法分配环境变量,Yarn 将使其在 Linux、OSX 和 Windows 中都能正常工作。

test: "NODE_OPTIONS='--max-old-space-size=2048' jest",
build: "webpack-cli --config ./webpack.config.js",
count-words "echo \"$@\" | wc -w",
},

依赖项

必须向当前软件包提供的一组依赖项,以便其正常工作。

有关更多信息,请参阅协议文档

webpack "^5.0.0",
},

optionalDependencies

如果 os/cpu/libc 字段与主机平台的字段匹配,Yarn 应仅尝试安装的一组依赖项。

与常规依赖项不同,optionalDependencies 中列出的依赖项允许有失败的 postinstall 步骤 - 实际上,如果 os/cpu/libc 过滤器不包含主机平台,它们甚至根本不会被安装。

请注意,optionalDependencies 仅关心软件包是否应安装/构建 - 它仍应可解析,否则无法判断检索软件包元数据的失败是有意的还是无意的。

fsevents "^5.0.0",
},

devDependencies

必须向当前软件包提供的一组依赖项,以便其作为工作区正常工作。

与常规依赖项不同,devDependencies 中列出的依赖项仅在将软件包作为工作区项目的一部分安装时才需要 - 通常通过克隆项目存储库,然后在其中运行 yarn install 来实现。

webpack "^5.0.0",
},

peerDependencies

依赖项集合,软件包必须从依赖项树中的祖先继承这些依赖项。

对等依赖项的语义保证,当包需要依赖项时,它将返回与包的祖先返回的完全相同对象实例。此机制使得对等依赖项成为跨多个包共享单例状态的最佳方式。

作为扩展,Yarn 支持“带有默认值的对等依赖项”:同时在 dependenciespeerDependencies 字段中列出的依赖项将首先尝试解决对等依赖项,但如果无法满足,则将回退到常规依赖项。

react: "*",
react-dom: "*",
},

工作区

引用项目工作区的文件夹 glob 模式数组。

工作区是单体仓库使用的一种可选功能,用于将大型项目拆分为半独立的子项目,每个子项目都列出自己的依赖项集。workspaces 字段是 glob 模式列表,用于匹配应成为应用程序工作区的所有目录。有关更多信息,请参阅 工作区文档

"packages/*",
],

依赖项元数据

影响 dependenciesdevDependencies 字段解释方式的其他设置。

在工作区项目上下文中,这些设置中的大多数将影响所有工作区,因此必须在项目的根目录中指定。除非另有说明,否则如果在工作区中找到 dependenciesMeta 字段,将忽略该字段。

dependenciesMeta.built

定义是否运行 postinstall 脚本。

如果为 false,则永远不会构建该软件包(拒绝列表)。当 yarnrc 设置 enableScripts 被关闭时,此行为会逆转 - 当发生这种情况时,只有将 built 明确设置为 true 的软件包才会被构建(允许列表);至于那些将 built 明确设置为 false 的软件包,它们只会看到它们的构建脚本警告被降级为简单的通知。

built: false,

dependenciesMeta.optional

定义依赖项是否可选。

dependenciesMeta 中的大多数其他设置不同,optional 在依赖项树中的任何位置都允许。它具有与 optionalDependencies 完全相同的效果 - 事实上,这是 optionalDependencies 编译为内部内容。

optional: false,

dependenciesMeta.unplugged

定义是否必须取消安装该软件包。

如果为 true,则指定的软件包将在安装时自动取消安装。这仅适用于包含非 Javascript 语言(例如 nan 包含 C++ 头文件)的软件包。

unplugged: true,
},
},

peerDependenciesMeta

影响 peerDependencies 字段解释方式的其他设置。

dependenciesMeta 不同,peerDependenciesMeta 允许在依赖项树的任何部分中使用。

peerDependenciesMeta.optional

定义当无法满足对等依赖项时是否记录警告。

如果为 true,则选定的对等依赖项将由软件包管理器标记为可选,从而消除我们可能发出的任何警告。

可选: true,
},
},

解析

覆盖特定依赖项的解析。

此字段允许你指示 Yarn 使用特定的解析(特定包版本),而不是解析器通常会选择的任何内容。这对于强制所有包使用依赖项的单个版本或回溯修复很有用。解析键的语法接受一个级别的特异性,因此以下所有示例都是正确的。

注意:当路径是相对路径(如使用 file:portal: 协议时),它相对于项目的路径解析。

注意:resolutions 字段只能在项目的根目录中设置,如果在任何其他工作区中使用,将生成警告。

relay-compiler: "3.0.0",
},

preferUnplugged

定义是否必须取消安装该软件包。

虽然 Yarn 尝试直接从其 zip 存档引用和加载包,但并不总是可行。启发式算法尝试检测 zip 加载会有问题的情况,并转而解压缩磁盘上的文件,但仅仅是启发式算法,它可能会报告不正确的结果。

preferUnplugged 字段允许你作为包作者自行定义你的包在作为存档存储时是否有效。如果设置,它将覆盖默认启发式算法。

files

将包含在已发布 tarball 中的文件 glob 模式数组。

文件模式遵循类似于 .gitignore 的语法,但相反:包括文件、目录或 glob 模式(***/* 等)将使该文件在打包时包含在 tarball 中。省略该字段将使其默认为 ["*"],这意味着它将包含所有文件。

如果缺少此字段,Yarn 将使用项目的 .gitignore 来生成包列表,或者在可用时使用 .npmignore 文件。

一些特殊文件和目录也会 包含排除,无论它们是否存在于 files 数组中。

"dist/**/*",
"lib/**/*",
],

publishConfig

影响包发布方式的额外设置。

publishConfig.access

定义在发布包时要使用的访问权限。

有效值是 publicrestricted,但 restricted 通常需要注册付费计划(这取决于您使用的注册表)。

access: "public" | "restricted",

publishConfig.bin

包的 bin 字段的替换,在发布的 tarball 中用于主字段。

bin: "./build/bin.js",

publishConfig.browser

包的 browser 字段的替换,在发布的 tarball 中用于主字段。

browser: "./build/browser.js",

publishConfig.executableFiles

在发布的 tarball 中必须标记为可执行 (+x) 的文件集合。

"./dist/shim.js",
],

publishConfig.main

替换包的 main 字段,在发布的 tar 包中使用,而不是主字段。

main: "./build/index.js",

publishConfig.module

替换包的 module 字段,在发布的 tar 包中使用,而不是主字段。

module: "./build/index.mjs",

publishConfig.registry

如果存在,将在包准备推送到远程位置时替换配置中定义的任何注册表。

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

publishConfig.type

替换包的 type 字段,在发布的 tar 包中使用,而不是主字段。

type: "./build/index.d.ts",
},

installConfig

影响包安装方式的其他设置。

installConfig.hoistingLimits

定义可以提升包的最高点。

有关更多信息,请参见 nmHoistingLimits

hoistingLimits: "workspaces" | "dependencies" | "none",

installConfig.selfReferences

定义工作空间是否允许引用自身。

有关更多信息,请参见 nmSelfReferences

},