全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

从版本 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 模块方法解析的全部内容,希望对大家有所帮助。如果您有什么问题,可以给我留言。感谢大家对本站的支持。


# nodejs  # 模块  # 原生模块  # node.JS的crypto加密模块使用方法详解(MD5  # AES  # Hmac  # Diffie-Hellman加密)  # NodeJS模块与ES6模块系统语法及注意点详解  # 详解CommonJS和ES6模块循环加载处理的区别  # Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块  # 详解Node.js中path模块的resolve()和join()方法的区别  # Node.js 使用request模块下载文件的实例  # ES6与CommonJS中的模块处理的区别  # Node.js笔记之process模块解读  # 详谈commonjs模块与es6模块的区别  # 详解node.js平台下Express的session与cookie模块包的配置  # 详解从Node.js的child_process模块来学习父子进程之间的通信  # Node.js中process模块常用的属性和方法  # JavaScript ES 模块的使用  # 加载  # 命令行  # 都是  # 器中  # 文件扩展名  # 有什么  # 是在  # 如果您  # 也会  # 你可以  # 就能  # 将在  # 是这样  # 什么时候  # 要在  # 也可  # 能在  # 你能  # 这部  # 可以通过 


相关文章: 如何在腾讯云服务器上快速搭建个人网站?  建站之星后台密码如何安全设置与找回?  如何用景安虚拟主机手机版绑定域名建站?  宝塔面板如何快速创建新站点?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何用西部建站助手快速创建专业网站?  如何规划企业建站流程的关键步骤?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  高端建站如何打造兼具美学与转化的品牌官网?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何用狗爹虚拟主机快速搭建网站?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何获取免费开源的自助建站系统源码?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  ,想在网上投简历,哪几个网站比较好?  ,有什么在线背英语单词效率比较高的网站?  SQL查询语句优化的实用方法总结  建站之星官网登录失败?如何快速解决?  名字制作网站免费,所有小说网站的名字?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  建站之星CMS五站合一模板配置与SEO优化指南  中山网站推广排名,中山信息港登录入口?  如何续费美橙建站之星域名及服务?  用v-html解决Vue.js渲染中html标签不被解析的问题  建站ABC备案流程中有哪些关键注意事项?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何通过虚拟主机空间快速建站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  电商平台网站制作流程,电商网站如何制作?  如何在Golang中使用replace替换模块_指定本地或远程路径  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  Android自定义listview布局实现上拉加载下拉刷新功能  如何快速搭建高效WAP手机网站吸引移动用户?  测试制作网站有哪些,测试性取向的权威测试或者网站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  建站之星安装步骤有哪些常见问题?  如何在IIS中新建站点并配置端口与IP地址?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  如何用低价快速搭建高质量网站?  建站之星收费标准详解:套餐费用及年费价格表一览  开封网站制作公司,网络用语开封是什么意思?  如何快速重置建站主机并恢复默认配置?  ,怎么在广州志愿者网站注册? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。