如何在Node.js中使用原生ES模块

从版本 8.5.0 开始,node.js 开始支持原生 es 模块,可以通过命令行选项打开该功能。新功能很大程度上得归功于 bradley farias。本文主要和大家介绍在 node.js 中使用原生 es 模块方法解析,还有部分内容的链接,下面我们就来一起看看吧,需要的朋友可以参考下,希望能帮助到大家。

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.mjsResult: 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); // 86import * 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”

相关推荐:

ES5实例详解javascript多种继承方式

ES6块级作用域详解

ES6模板字符串实例分享

以上就是如何在Node.js中使用原生ES模块的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787011.html

(0)
上一篇 2025年3月8日 18:00:16
下一篇 2025年3月8日 18:00:26

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 实例详解js中ajax访问

    本文主要和大家介绍原生js中ajax访问的实例详解的相关资料,希望通过本文大家能够掌握理解这部分内容,需要的朋友可以参考下,希望能帮助到大家。 原生js中ajax访问的实例详解 form表单中 登录名: 失去光标即触发事件 function…

    编程技术 2025年3月8日
    200
  • angluarjs过滤并替换关键字功能实现代码

    本文主要和大家大家详细介绍angluarjs实现过滤并替换关键字小功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 html样式       {{ keytext|wordFilter:”#” }} 登录后复制 /…

    2025年3月8日
    200
  • JavaScript数组去重的几种方法分享

    数组去重,一般需求是给你一个数组,调用去重方法,返回数值副本,副本中没有重复元素。一般来说,两个元素通过 === 比较返回 true 的视为相同元素,需要去重,所以,1 和 “1” 是不同的元素,1 和 new nu…

    编程技术 2025年3月8日
    200
  • js实现抽奖系统功能代码分享

    本文主要和大家详细介绍了一个关于抽奖系统的题目之js抽奖系统功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助大家运用js开发一个抽系统。 要求实现功能: 1.点击左侧按键,开始抽奖,点击右侧按键,停止抽奖; 2.敲击回车键…

    编程技术 2025年3月8日
    200
  • JavaScript事件处理程序详解

    本文主要和大家详细介绍javascript事件处理程序的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 nbsp;html>    DOM0级DOM2级 function show() { alert(…

    编程技术 2025年3月8日
    200
  • 全面讲解js中的原型

    在讲js的原型之前,必须先了解下object和function。object和function都作为js的自带函数,object继承自己,funtion继承自己,object和function互相是继承对方,也就是说object和funct…

    2025年3月8日
    200
  • Node.js、jade生成静态html文件实例

    本文主要为大家带来一篇node.js+jade抓取博客所有文章生成静态html文件的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 项目结构: 立即学习“前端免费学习笔记(深入)”; …

    2025年3月8日
    200
  • javascript知识小结

    本文主要整理 javascript 中一些相似的关键字、方法、概念,并分享给大家,希望能帮助到大家。 1. var、function、let、const 命令的区别 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象 使…

    2025年3月8日
    200
  • 实例详解javascript数组去重的几种思路

    数据去重的需求实际上像是lodash这些工具库已经有成熟完备的实现,并且可以成熟地运用于生产环境。但是这并不妨碍我们从思维拓展的角度出发,看看去重可以用几种思路去实现。本文主要和大家分享javascript数组去重的几种思路。 首先是常规的…

    编程技术 2025年3月8日
    200
  • 前端框架ThinkJS框架详解

    本文主要和大家分享前端框架thinkjs框架详解,thinkjs 是一个快速、简单的基于mvc和面向对象的轻量级node.js开发框架,遵循mit协议发布。秉承简洁易用的设计原则,在保持出色的性能和至简的代码同时,注重开发体验和易用性,为w…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论