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

Node.js中type:module模式下使用require报错,如何解决?

解决ES模块环境下require is not defined错误的三种方案

你遇到的问题是因为项目里package.json设置了"type": "module",Node.js会把所有.js文件默认当作ES模块处理,而ES模块不支持CommonJS的require()语法,必须用ES模块的import/export规范。下面是三种直接的解决方法:

1. 改用ES模块的import语法替换require

把你的导入代码改成ES模块格式,同时确保导出的文件也用ES模块的export语法:

  • 原代码:

    let { controllerUser } = require('./router')
    

    修改为:

    import { controllerUser } from './router.js';
    

    注意:ES模块里导入本地文件必须加上完整后缀(比如.js),Node.js不会自动补全。

  • 对应的router.js文件里,导出要改成ES模块格式:

    // 原来的CommonJS导出:module.exports = { controllerUser: ... }
    export const controllerUser = {
      // 你的代码逻辑
    }
    

2. 将使用require的文件改为CommonJS格式

如果不想改用ES模块语法,直接把当前使用require()的文件后缀从.js改成.cjs。Node.js会自动识别.cjs后缀的文件为CommonJS模块,这样就能正常使用require(),不需要修改package.json的type配置。

3. 单独配置文件的模块类型(进阶)

如果需要保留.js后缀但又想用CommonJS语法,可以在package.json里通过exports字段单独指定某个文件的模块类型:

{
  "type": "module",
  "exports": {
    "./your-file.js": {
      "require": "./your-file.cjs"
    }
  }
}

把your-file.js换成你实际的文件名,然后把代码移到对应的.cjs文件里,这样外部导入时可以用.js路径,但实际执行的是CommonJS格式的.cjs文件。不过这种方法适合复杂场景,一般前两种就够用了。

内容的提问来源于stack exchange,提问作者sajiddev207

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:22:48