VSCode报“Module not found”但终端正常,主因是语言服务未正确识别node_modules路径,常见于pnpm/yarn workspaces或打开路径非项目根目录,需检查tsconfig.json、Node版本一致性及TS Server状态。

VSCode 报 “Module not found” 但终端能跑通
这是最典型的依赖项检查错位现象:VSCode 的 JavaScript/TypeScript 语言服务(由 TypeScript Server 驱动)没读到你项目里实际安装的 node_modules,或者读到了错误的版本。常见于使用 pnpm 或 yarn workspaces 的单体仓库,或 VSCode 打开的路径不是真正的项目根目录。
- 确认 VSCode 左下角显示的
Node.js版本和你在终端运行node -v是否一致;不一致说明 VSCode 没继承 shell 环境变量,需在 VSCode 设置中启用typescript.preferences.includePackageJsonAutoImports并重启 TS 服务 - 右键点击报错的
import语句 → 选择Go to Type Definition,如果跳转失败或提示“no definition found”,大概率是tsconfig.json的baseUrl/paths配置未被识别,或node_modules/@types缺失 - 运行
npm list(如npm list react)确认包确实存在且版本符合import调用方式;若用pnpm,改用pnpm ls
TS Server 反复崩溃或无法识别新装的依赖
VSCode 底部状态栏出现 “TypeScript language features are disabled” 或频繁弹出 “Restart TS server” 提示,往往不是插件问题,而是类型定义加载异常。
- 检查项目根目录是否存在有效的
tsconfig.json;空文件、只含注释、或写成tsconfig.base.json但没被引用,都会导致 TS Server 降级为默认配置,忽略node_modules中的@types - 删除
node_modules/.pnpm(pnpm)或node_modules/.cache(yarn)等缓存目录后重装依赖,旧缓存可能让 TS Server 加载了过期的类型声明 - 在
tsconfig.json中显式启用类型自动导入:{"compilerOptions": {"types": ["node", "jest"], "allowSyntheticDefaultImports": true}}避免因缺少@types/node导致整个类型检查链断裂
ESLint / Prettier 报依赖缺失但 npm run lint 正常
VSCode 内置的 ESLint 插件默认从工作区根目录找 eslint,但它不会自动识别 pnpm 的硬链接结构或 volta 管理的二进制路径,容易报 Cannot find module 'eslint-plugin-react'。
- 在 VSCode 设置中搜索
eslint.packageManager,设为"pnpm"或"yarn"(不能留空或设为"npm") - 确保
.eslintrc.cjs或eslint.config.js中的plugins和extends使用的包名与package.json中的devDependencies完全一致(注意大小写和横线) - 如果项目用了
eslint-config-airbnb这类组合包,必须同时安装它所依赖的子插件(如eslint-plugin-import),否则 VSCode 插件会在解析时直接 throw,而 CLI 因有容错逻辑反而能继续
调试时断点失效,提示 “No source available”
这通常不是 Node.js 版本问题,而是 VSCode 的 launch.json 没正确映射源码路径,尤其在使用 TypeScript 编译或 monorepo 场景下。
- 确认
launch.json中outFiles指向的是真实生成的.js文件路径,例如:"outFiles": ["${workspaceFolder}/dist/**/*.js"]而不是./build或./lib(除非你真这么配) - 检查
tsconfig.json的sourceMap和inlineSourceMap是否为true;二者不要同时启用,优先用sourceMap: true+inlineSources: true - 如果用
pnpm,某些调试器无法穿透node_modules/.pnpm的嵌套 symlink,可在launch.json加上:"resolveSourceMapLocations": ["!**/node_modules/**"]
跳过对依赖源码的映射尝试
node_modules。动手前先看左下角状态栏、打开输出面板切换到 “TypeScript” 或 “ESLint”,里面往往直接写着加载失败的具体路径和原因。










