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

运行node index.js遇ReferenceError: require未定义问题求助

解决ES模块与CommonJS语法冲突问题

你遇到的问题是因为Node.js根据package.json里的"type": "module"配置,把所有.js文件识别为ES模块,但你的代码里用了CommonJS的require()语法,两者不兼容。下面是三种直接可行的解决办法:

方法1:将require替换为ES模块的import语法

把代码里所有require()调用改成对应的import写法,同时调整导出语法(如果有的话):

  • 第三方包/内置模块导入示例:
    // 原来的CommonJS写法
    const readline = require('readline');
    // 改成ES模块写法
    import readline from 'readline';
    // 或者需要导入所有导出项时
    import * as readline from 'readline';
    
  • 导出语法调整:
    // 原来的CommonJS导出
    module.exports = { myFunction };
    // 改成ES模块导出
    export default { myFunction };
    // 或者单个导出
    export const myFunction = () => {};
    

方法2:修改package.json移除ES模块配置

删除package.json里的"type": "module"字段,这样Node.js会默认把.js文件当作CommonJS模块,你可以继续使用require()语法。如果项目里有其他需要用ES模块的文件,将它们重命名为.mjs后缀即可。

方法3:重命名文件为.cjs后缀

直接把index.js改名为index.cjs,Node.js会自动将.cjs后缀的文件识别为CommonJS模块,不管package.json里的"type"配置是什么。之后运行命令改成:

node index.cjs

根据你的项目需求选一种就行:如果打算全面迁移到ES模块,选方法1;如果想继续用CommonJS,选方法2或3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:35:34