You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CJS导入/导出语法转为ESM?含具体代码转换问询

正确转换CommonJS导出为ESM的方案

问题根源

你之前的导出写法都没抓住核心:原来的module.exports = model('users', userSchema)是把**model调用后的结果(也就是User模型)**作为模块的默认导出,而你要么写错了语法,要么导出了错误的对象(model函数本身)。

正确的两种导出方式

1. 默认导出(对应原CJS写法的直接转换)

先把模型赋值给变量,再用export default导出:

// 导出文件示例(比如 user.model.js)
const User = model('users', userSchema);
export default User;

对应导入写法:

// 导入文件
import User from '../user.model.js';

2. 命名导出

如果想明确用命名导出,直接导出带名称的变量:

// 导出文件示例
export const User = model('users', userSchema);

对应导入写法:

// 导入文件
import { User } from '../user.model.js';

为什么你之前的写法失败?

  • 第一种导出export { model('users', userSchema) }:语法错误,export {}的大括号里只能放已定义的变量名,不能直接写函数调用表达式,必须先把结果存到变量里再导出。
  • 第二种导出model('users', userSchema); export { model }:这里导出的是model函数本身,不是你要的User模型,所以导入时找User自然找不到。

额外:用import * as的导入方式

如果用通配符导入,对应不同导出方式的获取逻辑:

  • 针对默认导出:
import * as UserModule from '../user.model.js';
const User = UserModule.default;
  • 针对命名导出:
import * as UserModule from '../user.model.js';
const User = UserModule.User;

内容的提问来源于stack exchange,提问作者D. Koshkarev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:35:18