nodejs ES 与 CJS 的互操作性
es
为了解决 ESM 和 CJS 的交互性问题,名为 default 的导出名称被赋予了特殊的语法。
import { default as cjs } from 'cjs';
// 下面的导入语句是上面的导入语句中 `{ default as cjsSugar }` 的 "语法糖"
import cjsSugar from 'cjs';
cjs 加载 es
在 nodejs 中,require() 命令是不能加载 ES 模块的,只能使用 import() 方法加载。
不支持的原因是他是同步加载的,而 ES 模块内部可以在顶层使用 await 命令,导致无法被同步加载。
// es
export const a = 1;
export default 2;
// cjs
const foo = require('foo.ejs');
// foo 打印为: Module { a: 1, default: 2 }