
ESM调用commonjs模块最简单的方法1import { createRequire } from module; export default require(./cjs.cjs); function require(name) { return createRequire(import.meta.url)(name) }最简单的方法2export default await require(./cjs.cjs); // 导出为 ESM async function require(name) { // return createRequire(import.meta.url)(name) return new Promise((resolve, reject) { import(url).then(({ fileURLToPath }) { import(module).then(({ createRequire }) { resolve(createRequire(fileURLToPath(import.meta.url))(name)) }) }) }) }桥接文件/server/server-bridge.mjs// server/server-bridge.mjs import { createRequire } from module import { fileURLToPath } from url import path from path // 创建一个 require 函数用于加载 CJS 模块 const require createRequire(import.meta.url) const __filename fileURLToPath(import.meta.url) const __dirname path.dirname(__filename) // 安全加载原始 CJS 模块 const serverCJS require(./server.notebook.node.js) // 导出为 ESM export const start serverCJS.start || serverCJS.default?.start || (() {}) export default serverCJScommonjs模块/server/server.notebook.node.jsconst server {start:()console.log(启动server)} module.exports serveresm中使用cjs模块import os from os import fs from fs import path from path import { start as startServer } from ./server/server-bridge.mjs const __dirname path.dirname(fileURLToPath(import.meta.url)) const serverPort 3002 startServer(serverPort)commonjs调用esm模块esm.jsexport default { name: 这是esm模块 }common.jsimport(../esm.js).then((m) { console.log(m.default) })