ESM的使用小结

122 阅读1分钟

启用ESM

package.json中添加字段

{
    "type": "module"
}

ESM中使用common.js

ESM 模块可以 import CJS 模块,但是只能通过“默认导入”的模式,

比如 import _ from 'lodash',而不支持“命名导入”,比如 import {shuffle} from 'lodash'

如果想使用命名导入的方式可以使用TypeScript(或是babel)

tsconfig.json中配置

"compilerOptions": {
    "allowSyntheticDefaultImports": true
    //"esModuleInterop": true  //js代码如果不是ES6的话需要加上
}

但这样做发现只在用vite-node插件启动开发时有效,将项目进行用rollup.js打包时,它不会进行处理.

相关issues: github.com/wessberg/ro…

ESM与common.js 的主要区别

ESM是异步模块,而CJS是同步模块

今年通过的顶部await规范只支持ESM

其他详细参考juejin.cn/post/704827…

在ESM中使用require

// util.cjs
exports.add = function add(a, b) {
  return a + b;
};

// index.mjs
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const { add } = require('./util.cjs');

console.log(add(1, 2)); // 3

参考:

juejin.cn/post/686555…

juejin.cn/post/702187…

juejin.cn/post/704827…