VSCode终端报“Cannot find module './index.js'”主因是当前工作目录非项目根,Node.js从执行路径解析相对路径;需用pwd/cd确认并切换至项目根,或在launch.json中显式配置"cwd":"${workspaceFolder}"。

VSCode 终端运行 Node.js 报 Cannot find module './index.js' 或类似路径错误,不是代码写错了,而是当前工作目录(cwd)和你预期的不一致——Node.js 从执行时的当前路径向上查找 node_modules 和解析相对路径,而 VSCode 终端默认工作目录往往不是项目根。
为什么终端里 node index.js 会报“找不到文件”
VSCode 内置终端启动时,cwd 默认是用户主目录(如 /home/you 或 C:\Users\you),不是你打开的项目文件夹。即使你用 File > Open Folder 打开了项目,终端也不会自动切换过去。
- 执行
node index.js时,Node.js 会在当前终端所在目录找index.js,而不是你编辑器里正在看的那个src/index.js - 如果你在子目录(比如
backend/)里打开了 VSCode,但没手动cd backend,终端仍处于上层目录,node server.js就会失败 -
require('./utils')在脚本里报错,也常因该脚本被从错误路径运行,导致相对路径解析失败
怎么确认并修正终端当前工作目录
别猜,直接验证:
- 在 VSCode 终端里运行
pwd(macOS/Linux)或cd(Windows),看输出路径是不是你的项目根目录 - 如果不是,手动
cd进去,比如cd my-project;之后再运行node index.js - 更彻底的做法:关闭所有终端 tab,按
Ctrl + Shift + P→ 输入Terminal: Create New Terminal,它会继承当前资源管理器焦点所在文件夹的路径(前提是已用Open Folder) - 如果常用某个项目,可在终端启动时自动
cd:在 VSCode 设置中搜terminal.integrated.profiles,为你的 shell 添加args,例如 Linux/macOS 加["-c", "cd /path/to/my-project && exec bash"]
launch.json 调试时 program 路径失效的常见坑
调试器不读终端的 cd 结果,它有自己的 cwd 规则:
-
"program": "./index.js"是无效写法——VSCode 不解析这种相对路径,必须用"${workspaceFolder}/index.js"或"${file}" - 没配
"cwd"字段时,调试器默认以${workspaceFolder}为工作目录;但如果你的脚本里有fs.readFileSync('./config.json'),而config.json在src/下,就会失败 - 正确做法:在
launch.json对应配置里加"cwd": "${fileDirname}",确保脚本总在自己所在目录执行 - 如果项目是多根工作区(比如含
frontend/和backend/),${workspaceFolder}指的是整个工作区根,不是子项目根;此时必须用${workspaceFolder:backend}显式指定
容易被忽略的底层细节
Node.js 的模块解析和路径行为极度依赖执行起点,而 VSCode 终端和调试器是两个独立进程,环境不共享:
- 你在终端里
cd backend && node index.js成功,不代表 F5 调试也能跑通——调试器不会复用这个cd状态 -
package.json中的main字段只对require('my-pkg')生效,对node index.js完全无影响 - ESM 项目下,
import './utils'必须带扩展名(./utils.js),否则无论cwd如何都报错,这不是路径问题,是语法限制 - Windows 用户注意:
node .会尝试读取package.json#main,但如果main指向dist/index.js而该文件尚未构建,就会报“找不到文件”——此时先npm run build


















