Node.js运行报错Cannot find local module本地模块找不到排查
问题描述
项目中引入本地自定义开发的库时,执行启动命令抛出模块找不到错误,执行命令与完整报错日志如下:
PS C:\Users\dydie\Documents\Proyecto Sena> node src/index.js node:internal/modules/cjs/loader:942 throw err; ^ Error: Cannot find module './back js/algorithms.js' Require stack: - C:\Users\dydie\Documents\Proyecto Sena\src\back js\utilities.js - C:\Users\dydie\Documents\Proyecto Sena\src\index.js at Module._resolveFilename (node:internal/modules/cjs/loader:939:15) at Module._load (node:internal/modules/cjs/loader:780:27) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (C:\Users\dydie\Documents\Proyecto Sena\src\back js\utilities.js:4:19) at Module._compile (node:internal/modules/cjs/loader:1105:14) at Module._extensions..js (node:internal/modules/cjs/loader:1159:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Module._load (node:internal/modules/cjs/loader:827:12) at Module.require (node:internal/modules/cjs/loader:1005:19) { code: 'MODULE_NOT_FOUND', requireStack: [ 'C:\\Users\\dydie\\Documents\\Proyecto Sena\\src\\back js\\utilities.js', 'C:\\Users\\dydie\\Documents\\Proyecto Sena\\src\\index.js' ] } Node.js v18.0.0
初步怀疑是index.js中如下引入代码触发报错:
const utilities = require("./back js/utilities.js");
存在反常现象:完全相同的引入代码此前在其他文件中可正常运行,对应关联功能目前也能正常使用;已尝试删除node_modules目录后重新安装依赖,问题没有解决。
根因定位
你一开始找错了报错的代码位置。
看错误栈的明确提示:报错抛出的真实位置是C:\Users\dydie\Documents\Proyecto Sena\src\back js\utilities.js的第4行,是这个文件内部引入./back js/algorithms.js时找不到对应文件,和你怀疑的index.js中引入utilities的代码没有关系——这也是为什么你觉得同一段引入代码之前能跑、相关功能也正常,因为那行代码本身就没有出错。
排查与修复步骤
- 第一步:打开
src/back js/utilities.js文件,定位到第4行的require语句,确认这里写的引入路径是./back js/algorithms.js - 第二步:修正路径写法:Node.js中
./开头的相对路径,是相对于当前执行require的文件所在目录计算的。utilities.js本身就存放在back js文件夹下,这时候写./back js/algorithms.js会被解析为src/back js/back js/algorithms.js,多嵌套了一层目录,自然找不到目标文件。两个同目录下的文件直接写require('./algorithms.js')即可 - 第三步(路径校验):如果不确定路径解析是否正确,可以在require语句前加一行
console.log(require.resolve('./algorithms.js')),运行后如果能正常打印出algorithms.js的绝对路径,说明路径配置正确;如果还是报错,直接打开文件资源管理器核对algorithms.js的实际存放位置,对应调整相对路径即可
补充提示:目录名、文件名带空格不会影响Node.js的模块解析,不需要特意修改文件夹名去掉空格,避免改动目录结构引发其他路径错误。另外重装
node_modules仅能解决npm第三方依赖的缺失问题,对项目本地自定义模块的路径错误完全无效,遇到这类MODULE_NOT_FOUND报错优先看requireStack定位真实报错位置,不要盲目重装依赖浪费时间。
内容的提问来源于stack exchange,提问作者Dydier Ripe
相关产品推荐
相关产品推荐

