从版本8.5.0开始,通过一个命令行选项,Node.js就能支持原生的ES模块。这个新功能主要归功于Bradley Farias。
本文将会解释其中的细节。
demo的版本库结构如下:
esm-demo/
lib.mjs
main.mjs
lib.mjs
:
export function add(x, y) {
return x + y;
}
main.mjs
:
import {add} from './lib.mjs';
console.log('Result: '+add(2, 3));
运行demo:
$ node --experimental-modules main.mjs
Result: 5
ES模块:
import()
运算符已经在开发中,应该不久就能使用了。__dirname
和__filename
。然而,Domenic Denicola提出的“import.meta
”可以为ES模块提供类似的功能。看起来可能长这样:
console.log(import.meta.url);与CJS模块的互操作性:
module.exports
的值。让CJS模块支持命名导出(例如,通过文件开头的pragma)已经被提上日程,但可能需要在等一段时间。如果您能帮忙,那就开始干吧。
import fs1 from 'fs'; console.log(Object.keys(fs1).length); // 86 import * as fs2 from 'fs'; console.log(Object.keys(fs2)); // ['default']require()
。主要原因是:NODE_PATH
和require.extensions
。而且,ESM的说明符始终是URL这一事实也会导致一些细微差异。require()
同步加载CJS模块的方式混用。await
成为可能(这属于当前正在考虑的功能)。如果要在8.5.0之前的Node.js版本上使用ES模块,请查看John-David Dalton的@std/esm
。
提示:如果您不解锁额外的新功能,则能完全兼容Node.js原生的ES模块。
目前的计划是在Node.js 10 LTS中默认支持ES模块。
往期精选文章 |
---|
ES6中一些超级好用的内置方法 |
浅谈web自适应 |
使用Three.js制作酷炫无比的无穷隧道特效 |
一个治愈JavaScript疲劳的学习计划 |
全栈工程师技能大全 |
WEB前端性能优化常见方法 |
一小时内搭建一个全栈Web应用框架 |
干货:CSS 专业技巧 |
四步实现React页面过渡动画效果 |
让你分分钟理解 JavaScript 闭包 |
小手一抖,资料全有。长按二维码关注京程一灯,阅读更多技术文章和业界动态。