簡體   English   中英

`main` 和 `module` 與 package.json 中的 `exports` 有什么區別?

[英]What is the difference between `main` and `module` vs `exports` in package.json?

我正在嘗試編寫一個既可以是require d 又可以是import ed 的庫。在網上找到了不同的方法,如下所示:

{
  "main": "mylib-cjs.js",
  "module": "mylib-esm.js"
}

{
  "exports": {
    "import": "mylib-esm.js",
    "require": "mylib-cjs.js"
  }
}

兩種方法的優缺點是什么,它們有何不同?

我認為你不應該再使用module了。 它適用於 webpack 和其他一些捆綁工具,但不適用於 node.js。 這是定義 ESM 入口點的舊方法。 因此,如果您正在編寫純粹的 FE 庫,則可以使用模塊,但在 node.js 中您需要使用exports type: module模式下運行時,只有那個才能正常工作。

不確定捆綁器及其對exports的支持,但我希望它們與節點的入口點保持一致。

"exports"替換了"module"字段。

根據Node 文檔,關於"main""exports"之間的區別:

在包的package.json文件中,兩個字段可以定義 package 的入口點: "main""exports" 這兩個字段都適用於 ES 模塊和 CommonJS 模塊入口點。

Node.js 的所有版本都支持"main"字段,但其功能有限:它僅定義了 package 的主要入口點。

"exports"提供了"main"的現代替代方案,允許定義多個入口點,支持環境之間的條件入口解析,並防止除“exports”中定義的入口點之外的任何其他入口點。 這種封裝允許模塊作者明確定義其 package 的公共接口。

對於針對當前支持的 Node.js 版本的新包,建議使用"exports"字段。 對於支持 Node.js 10 及以下版本的包, "main"字段是必需的。 如果同時定義了"exports""main" ,則在支持的 Node.js 版本中, "exports"字段優先於"main"

請記住"main"字段仍然可以被其他在線工具使用,例如 jsDelivr: https://www.jsdelivr.com/features#publishing-packages

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM