You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:51:25