我创建了一些npm模块并将其编译为:
250
)和exports.default =
)我这样设置我的package.json:
export default
当我npm安装软件包时,我可以像这样简单地导入它:
main: "index.cjs.js",
module: "index.esm.js"
它将自动选择import myPackage from 'my-package'
文件,而不是模块。
在JavaScript文件中执行main
时,是否可以导入module
文件?
我注意到,由于import myPackage from 'my-package'
,使用Node无法导入esm
文件,它必须是commonJS。我有一些简单的辅助JS函数,例如this和this,我希望它们可以被最广泛的读者使用。这就是为什么我在package.json中的export default
路径中选择cjs
的原因。
许多著名的库(例如Vue.js)已经在这样做。查看有关此Stackoverflow线程的更多信息:
What is the "module" package.json field for?
当前有一个bug in Rollup,在导入"main"
文件后进行编码时,它不会正确显示JSDoc注释,但是在导入{{1 }}文件。
只需将“ main”设置为package.json中的cjs
文件,对吗?但是,所有在Node应用程序中使用我的软件包的用户将无法再使用它...
→我对这一切也感到非常困惑,但我认为我做了足够的研究以弄清所有这些。话虽如此,如果有人知道更好的方法或任何其他建议,请在下面的评论中告诉我!!
答案 0 :(得分:2)
仅对主文件不使用扩展名,并且将es6和CommonJS版本作为两个具有相同名称和相同目录但具有不同扩展名的独立文件,所以:
index.js // transpiled CommonJS code for old nodejs
index.mjs // es6 module syntax
和package.json
中的
{
"main": "index"
}
如果使用--experimental-modules
标志启动节点,则它将使用*.mjs
文件,否则使用*.js
。