[英]What is a module and difference between module.exports vs 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.