【Node】ECMAScript模块

2023/11/28 22:23:142021/11/25 14:23:53

概念

ESM 模块系统是静态的

导入模块的语句 import 'xxx' from 'xxx' 必须写在最顶层,而且要置于流程控制语句之外。

这样的好处是可以进行依赖分析,实现摇树优化。

要实现异步加载需要使用 import() 方法,这个方法返回一个 promise

在 Node.js 平台中使用ESM

Node.js 平台默认把所有 .js 文件都当成采用 CommonJS 语法编写的,解决方式有两种:

  • 把模块文件的后缀写为 .mjs
  • 在项目目录最上级的 package.json 中添加 type 字段,值为 module

语法

导出

export const CONSTANT = 42;

export let variable = 42;
// 对外暴露的变量为只读
// 无法从外部修改

export function fun() {
  console.log("fun");
}

export class C extends Super {
  method() {
    console.log("method");
  }
}

let a, b, other;
export { a, b, other as c };

export default 1 + 2 + 3 + more();

导入

import { CONSTANT, variable } from "./module.js";
// 导入由其他模块导出的“绑定”
// 这些绑定是动态的. 这里并非获取到了值的副本
// 而是当将要访问“variable”时
// 再从导入的模块中获取当前值

import * as module from "./module.js";
module.fun();
// 导入包含所有导出内容的“命名空间对象”

import theDefaultValue from "./module.js";
// 导入 `default` 导出的快捷方式

参考

ECMAScript 模块open in new window