在 Node.js 中使用原生 ES 模块方法解析
发布时间 - 2026-01-11 03:18:52 点击率:次从版本 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 模块的使用
# 加载
# 命令行
# 都是
# 器中
# 文件扩展名
# 有什么
# 是在
# 如果您
# 也会
# 你可以
# 就能
# 将在
# 是这样
# 什么时候
# 要在
# 也可
# 能在
# 你能
# 这部
# 可以通过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
html如何与html链接_实现多个HTML页面互相链接【互相】
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
动图在线制作网站有哪些,滑动动图图集怎么做?
Python文件异常处理策略_健壮性说明【指导】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
北京专业网站制作设计师招聘,北京白云观官方网站?
使用Dockerfile构建java web环境
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
详解jQuery中基本的动画方法
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
HTML 中动态设置元素 name 属性的正确语法详解
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
JS实现鼠标移上去显示图片或微信二维码
个人摄影网站制作流程,摄影爱好者都去什么网站?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
iOS正则表达式验证手机号、邮箱、身份证号等
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
微信小程序 HTTPS报错整理常见问题及解决方案
常州企业网站制作公司,全国继续教育网怎么登录?
中国移动官方网站首页入口 中国移动官网网页登录
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
昵图网官方站入口 昵图网素材图库官网入口
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何在不使用负向后查找的情况下匹配特定条件前的换行符
香港服务器WordPress建站指南:SEO优化与高效部署策略
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
iOS UIView常见属性方法小结
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
网站制作免费,什么网站能看正片电影?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
微信小程序 wx.uploadFile无法上传解决办法
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
JS中对数组元素进行增删改移的方法总结
如何在万网开始建站?分步指南解析
如何在万网利用已有域名快速建站?
Laravel如何使用Eloquent进行子查询
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
WordPress 子目录安装中正确处理脚本路径的完整指南
,南京靠谱的征婚网站?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
JavaScript模板引擎Template.js使用详解
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧

