当前位置: 首页 > news >正文

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

ESM调用commonjs模块

最简单的方法1:

import { createRequire } from "module"; export default require("./cjs.cjs"); function require(name) { return createRequire(import.meta.url)(name) }

最简单的方法2:

export 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 serverCJS

commonjs模块

/server/server.notebook.node.js

const server = {start:()=>console.log("启动server")} module.exports = server

esm中使用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.js

export default { name: '这是esm模块' }

common.js

import('../esm.js').then((m) => { console.log(m.default) })
http://www.jsqmd.com/news/1185809/

相关文章:

  • 面向多智能体系统的统一认知协议栈设计与实现——以WSaiOS为例
  • 多租户系统AI评审:数据隔离与性能优化实战
  • Palworld存档编辑工具:从神秘二进制到可读JSON的魔法转换
  • 终极指南:如何将闲置USB-C显示屏变身为个性化系统监控中心
  • [具身智能-591]:RDK X5 3.5mm 音频口搭配 4 段式耳机完整详解
  • Flask API 生产级 Docker 化:从环境一致性到容器健壮性
  • 3分钟快速搭建你的AI股票分析平台:TradingAgents-CN终极指南
  • 形态学操作原理与实战:结构元素设计、开闭运算及工业应用
  • 系统架构师备考指南:考前动员
  • 2026年实测:免费的PDF转Word哪个好用 亲测避坑指南 - 图片处理研究员
  • 28天免费掌握GDScript编程:从零到游戏开发实战指南
  • TMC7300与PIC18F2620构建高性能有刷直流电机控制系统
  • 元初混沌物理 108 篇 第九十二篇 七星节律体系总闭环
  • 多维聚合中的数据变形:从groupby到分析视图的四次跃迁
  • Cocos事件响应混乱的三大解决策略:冒泡、层级与全局管理
  • linux下开发stm32
  • OnscripterYuri WebAssembly优化技巧:提升浏览器游戏性能的10个方法
  • 3种高效部署策略:Qwen3-32B模型优化与资源效率平衡指南
  • C++实现数据归一化:从原理到高性能工程实践
  • AD7490与PIC18F47Q10构建高性价比数据采集系统
  • Cane高级用法:如何自定义检查规则满足团队特定需求
  • 无纺布行业焊接选哪种超声波设备合适? - 中媒介
  • 豆包AI跑高速视频技术解析:从扩散模型到自动驾驶仿真应用
  • 快速上手Phrase:5分钟学会Android字符串动态格式化
  • XMBOX直播功能详解:支持多种直播源协议的播放器
  • A3910与PIC18LF45K40电机驱动方案解析
  • 【JS知识点总结】关于“解构”
  • XUnity.AutoTranslator:5分钟掌握Unity游戏自动翻译的终极指南
  • 统计学与人工智能:从基础概念到Python实战应用
  • C 语言实战:字符串左旋与旋转判断的高效解法