文件优先级
由于我们使用的模块规范有 ESM 和 commonJS 两种,为了能在 node 环境下原生执行 ESM 规范的脚本文件,.mjs
文件就应运而生
- ESM 加载
mjs
- commonJS 加载
js
字段定义
main
: 定义了npm
包的入口文件,browser 环境和 node 环境均可使用module
: 定义npm
包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用browser
: 定义npm
包在 browser 环境下的入口文件
非官方字段定义
types
,typings
:定义一个针对TypeScript
的入口文件。 详细参考 TypeScript documentation.- unpkg: 让
npm
上所有的文件都开启cdn
服务。
{
"unpkg": "dist/jquery.js"
}
flat
: 如果你的包只允许给定依赖的一个版本,你想强制和命令行上yarn install --flat
相同的行为,把这个值设为true
。resolutions
:允许你覆盖特定嵌套依赖项的版本。有关完整规范,请参见选择性版本解析 RFC。
详细参考 yarn - resolutions.
{
"resolutions": {
"transitive-package-1": "0.0.29",
"transitive-package-2": "file:./local-forks/transitive-package-2",
"dependencies-package-1/transitive-package-3": "^2.1.1"
}
}
总结
- 如果
npm
包导出的是 ESM 规范的包,使用 module - 如果
npm
包只在 web 端使用,并且严禁在 server 端使用,使用 browser。 - 如果
npm
包只在 server 端使用,使用 main - 如果
npm
包在 web 端和 server 端都允许使用,使用 browser 和 main - 其他更加复杂的情况,如
npm
包需要提供 commonJS 与 ESM 等多个规范的代码文件,请参考上述使用场景或流程图