esm模块与commonjs模块相互调用的方法

ESM调用commonjs模块

桥接文件

/server/server-bridge.mjs

javascript 复制代码
// 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 serverCJS

commonjs模块

/server/server.notebook.node.js

javascript 复制代码
const server = {start:()=>console.log("启动server")}
module.exports = server

esm中使用cjs模块

javascript 复制代码
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.js

javascript 复制代码
export default {
  name: '这是esm模块'
}

common.js

javascript 复制代码
import('../esm.js').then((m) => {
  console.log(m.default)
})
相关推荐
发现一只大呆瓜5 分钟前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
小糯米60118 分钟前
C++顺序表和vector
开发语言·c++·算法
css趣多多21 分钟前
ctx 上下文对象控制新增 / 编辑表单显示隐藏的逻辑
前端
froginwe1124 分钟前
JavaScript 函数调用
开发语言
阔皮大师28 分钟前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙28 分钟前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js
独望漫天星辰28 分钟前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++
_codemonster28 分钟前
Vue的三种使用方式对比
前端·javascript·vue.js
寻找奶酪的mouse29 分钟前
30岁技术人对职业和生活的思考
前端·后端·年终总结
梦想很大很大37 分钟前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go