运行ReadMe生成器时Nodemon报ES模块require未定义错误
问题原因
package.json中配置了"type": "module"时,Node.js会默认将所有.js后缀的文件按ES Module规范解析,而ES Module规范下不支持CommonJS标准的require()导入语法。你在index.js首行用const inquirer = require('inquirer')的CommonJS写法导入依赖,直接触发了该报错。
另外你代码末尾只写了runQuery没有加括号执行,就算解决模块导入问题,交互逻辑也不会实际运行。
修复方案
二选一即可,优先推荐方案1,适配inquirer最新版本的要求:
方案1:保留ES Module配置,改用ES标准导入语法
- 替换
index.js第一行的导入代码为ES规范写法:
import inquirer from 'inquirer';- 将文件末尾单独的
runQuery补全括号为函数调用:
runQuery();提示:inquirer 9.0及以上版本本身就是纯ESM包,用这种写法不会出现兼容问题。
- 替换
方案2:切回CommonJS规范
两种操作选其一即可:- 打开根目录
package.json,直接删除"type": "module"配置项后保存,Node.js会默认把.js文件按CommonJS解析; - 不想改
package.json的话,直接把index.js重命名为index.cjs,Node.js会自动将.cjs后缀文件识别为CommonJS模块。
注意:选这个方案同样要记得把文件末尾的
runQuery改成runQuery();,否则函数不会执行。- 打开根目录
内容的提问来源于stack exchange,提问作者Alenco98
相关产品推荐
相关产品推荐

