随着 CommonJS 的消亡,库的 package.json“main”字段中应该包含什么?

问题描述 投票:0回答:1

当 JavaScript 包的维护者决定停止分发 CommonJS 版本时,

package.json
文件的 "main" 字段中应该包含哪些内容?

以 CommonJS 文件作为 "main" 条目的旧

package.json
字段示例:

   "type": "module",
   "module": "dist/pretty-print-json.js",
   "browser": "dist/pretty-print-json.min.js",
   "main": "dist/pretty-print-json.umd.cjs",
   "types": "dist/pretty-print-json.d.ts",
   "files": ["dist"],
   "exports": {
      ".": {
         "import": "./dist/pretty-print-json.js",
         "require": "./dist/pretty-print-json.umd.cjs"
      },
      "./": "./dist/"
   },

package.json 字段示例:

   "type": "module",
   "module": "dist/pretty-print-json.js",
   "browser": "dist/pretty-print-json.min.js",
   "main": “???????????”,
   "types": "dist/pretty-print-json.d.ts",
   "files": ["dist"],
   "exports": "./dist/pretty-print-json.js",

node文档指出:

当通过

"main"
查找按名称导入时,
node_modules
字段定义包的入口点。它的值是一条路径。当包具有
"exports"
字段时,在按名称导入包时,该字段将优先于
"main"
字段。

node 将使用

"exports"
而不是
"main"
,但是各种不同的打包器可能会实现不同的规则。一旦软件包放弃对
"main"
CommonJS 模块的支持,是否应该简单地删除
require()
字段?

javascript node.js npm package.json commonjs
1个回答
0
投票

删除

"main"
字段并使用
"exports"
代替。

许多著名 npm 包的作者 sindresorhus,撰写了一篇题为 “如何将我的 CommonJS 项目转移到 ESM?”的常见问题解答,并推荐:

将 package.json 中的

"main": "index.js"
替换为
"exports": "./index.js"

对我所依赖的一些流行软件包的快速调查显示出许多不一致之处。有些软件包甚至设置

"type": "module"
并将
"main"
指向 ESM 文件。最重要的是正确设置
"exports"

© www.soinside.com 2019 - 2024. All rights reserved.