javascript - 如何在 package.json 中选择“模块”而不是“主”文件
问题描述
我创建了一些 npm 模块并将它们编译为:
- commonJS(使用
exports.default =
)和 - esm(使用
export default
)
我像这样设置我的 package.json :
main: "index.cjs.js",
module: "index.esm.js"
当我 npm install 包并简单地导入它时,如下所示:
import myPackage from 'my-package'
它会自动选择main
文件,而不是模块。
我的问题:
有没有办法在 JavaScript 文件中导入文件module
?import myPackage from 'my-package'
为什么我为“main”选择 commonJS 文件:
我注意到使用 Node,导入esm
文件是不可能的export default
,因为它必须是 commonJS。我有一些简单的辅助 JS 函数,比如this和this,我希望它们能够被最广泛的受众使用。这就是为什么我选择package.jsoncjs
中的"main"
路径。
为什么我在 package.json 中定义一个单独的“模块”:
许多像 Vue.js 这样的著名库已经在这样做了。请参阅有关此 Stackoverflow 线程的更多信息:
为什么我希望能够导入“模块”文件而不是“主”文件:
Rollup中目前存在一个错误,它在导入文件后编码时无法正确显示 JSDoc 注释,但在导入文件时cjs
它确实es
有效。
我想避免的解决方法:
只需将“main”设置为esm
package.json 中的文件,对吗?但是,所有在 Node 应用程序中使用我的包的用户将无法再使用它......
→ 我也对这一切感到困惑,但我认为我做了足够的研究来理解这一切。话虽如此,如果有人知道更好的方法或任何其他建议,请在下面的评论中告诉我!!
解决方案
只是不要对主文件使用扩展名,并将 es6 和 CommonJS 版本作为两个单独的文件,名称相同,位于同一目录中,但扩展名不同,所以:
index.js // transpiled CommonJS code for old nodejs
index.mjs // es6 module syntax
并在package.json
:
{
"main": "index"
}
如果节点以--experimental-modules
标志启动,它将使用*.mjs
文件,否则*.js
。
推荐阅读
- pandas - Pandas - 如何为除我指定的列之外的所有列指定默认数据类型?
- java - 无法运行 uiautomatorviewer
- node.js - 哈巴狗不显示本地图像
- excel - 找不到有关使用用户选择的单元格的信息
- java - Micronaut 中的异常处理
- dart - 如何转换流
流式传输 - google-cloud-platform - 查找 Google 控制台访问权限?
- java - VM 初始化期间发生错误无法为对象堆 Android Studio 保留足够的空间
- pagespeed-insights - PageSpeed Insights - 没有移动设备的 FID 数据
- r - 查找数据框两列的交集,并将交集值放在新列中,用 R 中的逗号分隔