program字段不能写死为index.js,因会锁死调试入口,违背“当前文件即目标”的直觉;应设为${file}实现自动识别活动文件,避免路径错误和模块找不到问题。

launch.json 中 program 字段为什么不能写死为 index.js
因为写死会锁死调试入口,导致切换文件时必须手动改配置——这违背了“当前文件即调试目标”的开发直觉。VSCode 的 Node.js 调试器默认支持 ${file} 变量,它会在你按 F5 时自动取当前活动编辑器的完整路径,无需保存、无需切换配置。
常见错误现象:
- 修改了
app.js却还在调试旧的index.js,终端输出和代码不一致 - 调试报错
Cannot find module '/path/to/index.js',实际文件名早就是server.js
正确做法是把 launch.json 中的 program 设为:
"program": "${file}"
如果想支持带参数启动(比如 node server.js --port 3001),再加一行:
"args": ["--port", "3001"]
settings.json 里要关掉哪些默认格式化行为
VSCode 自带的 JavaScript 格式化(vscode.typescript-language-features)和 Prettier 会冲突,尤其在 import 排序、分号、引号风格上容易互相覆盖,最终表现为:保存后代码被反复重排、ESLint 报告与实际格式不符。
必须显式禁用内置格式化器,只留 Prettier 管理:
- 在项目根目录
.vscode/settings.json中添加:"javascript.format.enable": false,
- 同时确保已安装
Prettier扩展,并启用它作为默认格式化工具:"editor.defaultFormatter": "esbenp.prettier-vscode"
- 若用 TypeScript,同理关掉:
"typescript.format.enable": false
注意:这些设置**不能只写在用户级 settings.json 里**,必须放在项目级(即 .vscode/settings.json),否则团队协作时其他人格式化行为不一致。
如何让 ESLint 在保存时真正修复问题,而不是只标红
ESLint 默认只做检查,不自动修复。即使装了扩展,若没配对,Ctrl+S 后依然要手动运行 eslint --fix。
关键配置有两处:
- 在
.vscode/settings.json中开启保存时修复:"editor.codeActionsOnSave": { "source.fixAll.eslint": true } - 确保项目中已安装
eslint且本地有.eslintrc.js或.eslintrc.cjs—— VSCode 的 ESLint 扩展默认只读本地配置,不走全局安装 - 如果用 ESM 项目(
type: "module"),.eslintrc.js必须改为.eslintrc.cjs,否则扩展加载失败,控制台报错Failed to load config "./.eslintrc.js" to extend from
node_modules 路径解析失效时该查哪几个地方
输入 require('express') 或 import express from 'express' 报错 Cannot find module 'express',但 npm list express 显示已安装——这类问题往往不是 npm 本身出错,而是 VSCode 没识别到正确的 node_modules 层级。
优先排查顺序:
- 确认当前打开的是**项目根目录**(含
package.json),不是父文件夹或子文件夹。VSCode 的 JS/TS 语言服务依赖package.json定位node_modules - 检查
jsconfig.json或tsconfig.json是否误设了"baseUrl"或"paths",导致模块解析路径偏移 - 重启 VSCode 的 TS 服务器:按
Ctrl+Shift+P→ 输入Restart TS Server→ 回车。很多路径缓存问题靠这个一步解决 - 极少数情况是
node_modules被 symlink 到别处(如 pnpm 的node_modules/.pnpm),此时需确认 VSCode 是否装了对应包管理器的扩展(如pnpm扩展)
最常被忽略的一点:VSCode 的「JavaScript 语言功能」是独立进程,它不会实时监听 node_modules 变化。新增依赖后,不重启 TS Server 或不重新打开文件夹,补全和跳转可能一直失效。











