node/nodemon启动src目录时部分JS文件未被执行问题排查求助
问题根因
- 执行
node src/或配置的nodemon启动命令时,Node.js默认只会加载目标目录下的index.js作为唯一入口文件,同目录下其余JS文件不会被自动扫描执行,只有在入口文件或其依赖链中通过require()/import显式引入的文件才会运行。你观察到web3.js能正常执行,本质是index.js中已经写了引入web3.js的代码,而database.js、test.js没有被任何已加载的文件引入,所以完全不会被Node运行,和nodemon忽略规则、文件本身代码逻辑无关。 - 配置文件读取报错是Node.js文件路径的经典认知偏差:
fs模块的相对路径是相对于执行node命令时的终端工作目录解析的,和当前JS文件所在目录没有绑定关系,所以你切换目录执行命令时,同样的相对路径会指向不同位置,触发ENOENT错误。
修复方案
按以下步骤操作即可解决所有问题:
- 在入口文件
src/index.js顶部显式引入需要随服务启动执行的文件:
// 加在src/index.js文件顶部,引入后对应文件的顶层代码会自动执行 require('./database.js') require('./test.js') // 测试文件验证完可删除
- 替换所有硬编码的配置文件相对路径,用
__dirname拼接固定绝对路径,彻底消除工作目录变化带来的路径错误:
const { readFileSync } = require("fs"); const path = require("path"); // 永远指向当前JS文件所在目录的上级(项目根目录)下的config.toml,不受执行命令位置影响 const configPath = path.resolve(__dirname, "../config.toml"); const { mongoUriOp } = toml.parse(readFileSync(configPath, 'utf-8'));
注:
__dirname是Node.js内置全局变量,永远返回当前JS文件所在的绝对目录路径,拼接出来的路径在任何执行场景下都能准确定位目标文件。
- 回到项目根目录执行
npm start验证,此时database.js、test.js都会正常加载执行,也不会再出现配置文件找不到的报错。
内容的提问来源于stack exchange,提问作者Zac Feng
相关产品推荐
相关产品推荐

