运行Node.js应用时出现“Cannot find module”错误如何解决?
问题原因
从错误日志和项目结构判断,这个MODULE_NOT_FOUND报错是以下几个高频原因导致的,按出现概率排序:
- 终端执行命令的工作目录错误:你当前终端所在路径是
C:\Users\rodri\NODE_CRUD,但你贴的项目结构显示所有代码文件都在node_crud_api子目录下,Node在当前工作目录找index.js自然找不到。日志里能读到node_crud_api@1.0.0的包信息,是npm递归向上查找package.json时读到了子目录的配置,但node执行时的工作目录仍然是你打开终端时的上级目录。 - Windows扩展名隐藏陷阱:Windows默认会隐藏已知文件类型的后缀,你很可能在新建文件时创建的是
index.js.txt文本文档,系统隐藏了.txt后缀,你视觉上看到的是index.js,但Node无法识别这个文本文件为js模块。 - 启动配置/入口代码异常:从日志看nodemon最终执行的命令是
node app.js dev index.js,比你在package.json里定义的nodemon app.js多了index.js参数,要么是你本地实际的start脚本被误改多写了参数,要么是app.js里有读取命令行参数、主动加载/启动index.js的逻辑,路径解析出错导致找不到文件。 - 文件名异常:index.js文件名存在大小写错误、末尾带隐藏空格、重复后缀(比如
index.js.js)等视觉很难发现的问题,导致模块匹配失败。
解决步骤
按顺序排查,每做完一步试一次npm start即可:
- 修正终端工作目录
在终端执行cd确认当前路径,再执行ls(PowerShell)或dir(CMD)列出当前目录文件,确认package.json、app.js、index.js三个文件直接存放在当前目录下。如果文件都在node_crud_api子文件夹,执行cd node_crud_api切入项目根目录再执行启动命令。 - 修正文件后缀问题
打开文件资源管理器,点击顶部「查看」选项卡,勾选「文件扩展名」选项,回到项目目录查看index.js的真实后缀,如果是.txt/其他后缀,直接重命名为index.js。 - 检查启动配置
打开本地实际的package.json文件(不要参考之前复制的内容,以磁盘存储的文件为准),确认scripts.start字段值为nodemon app.js,没有多余参数。同时检查项目根目录有没有nodemon.json配置文件,如果有先删除,避免自定义配置干扰默认启动逻辑。 - 修正入口配置(可选,最快绕过问题)
你贴的index.js里已经写了完整的express服务初始化、端口监听逻辑,完全可以直接作为项目入口,不需要额外的app.js中转。直接把package.json里的start脚本改成:
改完直接执行"start": "nodemon index.js"npm start即可跳过app.js的异常逻辑。 - 排查app.js代码
如果必须用app.js作为入口,打开app.js检查是否存在child_process.fork、spawn之类启动子进程的代码,是否存在读取process.argv参数后加载模块的逻辑,修正对应路径的写法即可。 - 依赖重装兜底
如果以上步骤都无效,删除项目根目录下的node_modules文件夹和package-lock.json文件,重新执行npm install安装全部依赖后再启动。
内容的提问来源于stack exchange,提问作者pomoworko.com
相关产品推荐
相关产品推荐

