在Node v8.5.0之前,publishing a module written in ES6 to NPMJS是一个简单的过程:使用Babel之类的工具转换ES6代码,并将生成的lib
目录发布到NPMJS,而GitHub存储库中包含src
文件。
通过export
标志使用v8.5.0, Node has released experimental support for native modules(import
/--experimental-modules
)。现在可以使用publish purely-ES6 modules to NPMJS和use them without any transpilation,只要所涉及的文件具有 .mjs 扩展名即可。
I如何发布ES6模块( .mjs ),以便它也可以与不支持ES native 模块的较旧的Node版本一起使用?
最佳答案
对于使用conditional exports的13.7.0+版本(从13.10.0+版本开始不再进行实验),这是可能的。尚没有很好的文档记录或明显的如何以完全向后兼容的方式执行此操作的方法,但这是我在实验性的情况下previously researched返回的技巧:node_modules/mod/package.json
{
"main": "./lib.js",
"exports": {
".": [
{
"import": "./lib.mjs",
"require": "./lib.js",
"default": "./lib.js"
},
"./lib.js"
]
}
}
node_modules/mod/lib.js
exports.format = 'cjs';
node_modules/mod/lib.mjs
export const format = 'mjs';
现在可以同时使用CommonJS了:main.js
const {format} = require('mod');
console.log(format);
$ node main.js
cjs
和ES模块:main.mjs
import {format} from 'mod';
console.log(format);
$ node main.mjs
mjs
在此之前,可以只在main
中使用无扩展名的package.json
条目,但是此功能已被删除。如果有兴趣,请参阅此答案的修订历史记录。关于javascript - 将ES模块(.mjs)发布到NPMJS,并向后兼容Node <8.5.0(双包),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46418010/