【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` 导出的快捷方式