在 Node.js 中使用原生 ES 模块方法解析


Posted in Javascript onSeptember 19, 2017

从版本 8.5.0 开始,Node.js 开始支持原生 ES 模块,可以通过命令行选项打开该功能。新功能很大程度上得归功于 Bradley Farias。

1.演示

这个示例的代码目录结构如下:

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));

运行演示:

$ node --experimental-modules main.mjs
Result: 5

2.清单:需要注意的事情

ES 模块:

·不能动态导入模块。但是 动态import() 的相关工作正在进行中,应该很快就能提供支持。

·没有元变量,如 __dirname 和 __filename。但是,有一个的类似功能的提案:“import.meta”。看起来可能是这样:

console.log(import.meta.url);

·现在所有模块标识符都是 URL(这部分在 Node.js 是新增的):

·文件 - 带文件扩展名的相对路径: ../util/tools.mjs

·库 - 没有文件扩展名,也没有路径 lodash

·如何更好地使 npm 库在浏览器中也可用(不使用 bundler)仍有待观察。一种可能性是引入 RequireJS 风格的配置数据,将路径映射到实际路径。目前,在浏览器中使用 bare path 的模块标识符是非法的。

与 CJS 模块的互操作性

你可以导入 CJS 模块,但它们总是只有默认的导出 - 即 module.exports 的值。让 CJS 模块支持命名导出已经在做了,但可能需要一段时间。如果你能帮忙,可以来做。

import fs1 from 'fs';
console.log(Object.keys(fs1).length); // 86
import * as fs2 from 'fs';
console.log(Object.keys(fs2)); // ['default']

 · 不能在 ES 模块中使用 require()。主要原因是:

 · 路径解析工作稍有不同:ESM 不支持 NODE_PATH 和 require.extensions。而且,它的标识符始终是 URL 也会导致一些细微差异。

 · ES 模块始终以异步方式加载,这确保了与 Web 的最大兼容性。这种加载风格并不能通过 require() 混合使用同步加载 CJS 模块。

 · 禁止同步模块加载也可以为 Top-level await 导入 ES 模块保留后路(一个当前正在考虑的功能)。

3.早期版本的 Node.js 上的 ES 模块

如果要在 8.5.0 之前的 Node.js 版本上使用 ES 模块,请参阅 John-David Dalton 的 @std/esm。

提示:如果不启用任何可解锁的额外功能,将在 Node.js 保持 100% 兼容原生 ES 模块.

FAQ

什么时候可以不带命令行选项使用ES 模块?

目前的计划是在 Node.js 10 LTS 中默认可使用 ES 模块。

进一步阅读

有关 Node.js 和浏览器中 ES 模块的更多信息:

 · “Making transpiled ES modules more spec-compliant” [using ES modules natively vs. transpiling them via Babel]

 · “Module specifiers: what's new with ES modules?” [Why .mjs? How are module specifiers resolved? Etc.]

 · “Modules” [in-depth chapter on ES modules in “Exploring ES6”]

即将到来的 ECMAScript 提案:

 · 博客: “ES proposal: import() ? dynamically importing ES modules”

 · 提案: “import.meta”

总结

以上就是小编给大家带来的在 Node.js 中使用原生 ES 模块方法解析的全部内容,希望对大家有所帮助。如果您有什么问题,可以给我留言。感谢大家对本站的支持。

Javascript 相关文章推荐
jQuery的一些特性和用法整理小结
Jan 13 Javascript
javascript smipleChart 简单图标类
Jan 12 Javascript
js判断背景图片是否加载成功使用img的width实现
May 29 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
js获取GridView中行数据的两种方法 分享
Jul 13 Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
JavaScript判断文件上传类型的方法
Sep 02 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
Vue2.0如何发布项目实战
Jul 27 Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 Javascript
分享5个顶级的JavaScript Ajax组件库
Sep 16 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
Apr 26 Javascript
Webpack 服务器端代码打包的示例代码
Sep 19 #Javascript
原生js中ajax访问的实例详解
Sep 19 #Javascript
angularjs实现过滤并替换关键字小功能
Sep 19 #Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 #Javascript
前端常见跨域解决方案(全)
Sep 19 #Javascript
详解.vue文件中监听input输入事件(oninput)
Sep 19 #Javascript
JavaScript数组去重的多种方法(四种)
Sep 19 #Javascript
You might like
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
php中函数前加&符号的作用分解
2014/07/08 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
详解YII关联查询
2016/01/10 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
Python fileinput模块使用介绍
2014/11/30 Python
Numpy之文件存取的示例代码
2018/08/03 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
平面设计专业求职信
2014/08/09 职场文书
资料员岗位职责范本
2015/04/13 职场文书
毕业实习证明范本
2015/06/16 职场文书