运行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
相关产品推荐
相关产品推荐

