启用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
参考: