返回
ES模块简介
前端
2024-02-11 19:19:01
Node环境中支持ES模块
为了解决Node环境中一直存在的问题,Node.js 13.2引入了对ES模块(也称为ESM)的支持,彻底改变了开发人员在Node.js环境中书写和组织JavaScript代码的方式。本指南将深入探讨如何让Node环境支持ES模块,指导您了解其好处、用法和注意事项。
ES模块是JavaScript的新标准,它提供了一种模块化代码的方法,与传统CommonJS模块有着显着差异。ES模块基于ECMAScript规范,并采用了ES6中引入的import
和export
语法。
自Node.js 13.2版本开始,ES模块默认情况下在Node环境中启用。但是,如果您使用较早版本的Node.js,则需要通过添加--experimental-modules
标志来手动启用它。
node --experimental-modules index.mjs
与CommonJS模块相比,ES模块具有以下优势:
- 更清洁的代码: ES模块基于
import
和export
语法,使代码组织更加清晰简洁。 - 静态导入: ES模块在运行时不会动态加载,这消除了回调和异步加载带来的潜在问题。
- 树形依赖关系: ES模块允许创建依赖树,其中模块可以相互依赖,而不会产生循环依赖性。
- 原生支持: ES模块是JavaScript的原生特性,不需要额外的编译器或工具来支持。
在Node环境中使用ES模块非常简单。
使用export
导出模块中的变量、函数和类。
// example.mjs
export const message = "Hello, world!";
export function sayHello() {
console.log(message);
}
使用import
关键字导入其他模块。
// main.mjs
import { message, sayHello } from './example.mjs';
console.log(message); // 输出: "Hello, world!"
sayHello(); // 输出: "Hello, world!"
使用ES模块时需要注意以下几点:
- 文件扩展名: ES模块文件必须使用
.mjs
扩展名。 - 导入路径: 导入路径必须相对于当前模块。
- 默认导出: ES模块可以有一个默认导出,这与CommonJS模块不同。
- 模块作用域: ES模块中的变量和函数仅在模块内部可见。
- 不支持动态加载: ES模块在运行时不会动态加载,因此无法使用
require()
函数来加载它们。
ES模块在Node环境中的引入为开发人员提供了一种更强大、更现代的方法来组织和书写JavaScript代码。通过了解ES模块的优势、用法和注意事项,您可以充分利用此功能并构建更清洁、更可维护的Node.js应用程序。