npm intellisense不工作需同时满足三条件:项目根目录有package.json、node_modules非空、文件语言模式为javascript或typescript;还需开启autoimports设置、禁用冲突扩展,并配置jsconfig.json/tsconfig.json的paths以支持别名补全。

装了 npm Intellisense 却在 import 或 require 里看不到已安装的包名?不是插件坏了,而是它根本没被触发——它只在三个硬条件同时满足时才“呼吸”。
npm Intellisense 不工作的三个硬门槛
它不看 VSCode 版本、不挑系统、也不管你重启几次,只认这三样:
-
package.json必须在你打开的 VSCode 工作区**最顶层目录**(不是子文件夹里) -
node_modules目录必须存在且**非空**:终端进该目录,ls node_modules要列出一堆子文件夹;空目录或报错就立刻npm install或pnpm install - 当前文件右下角语言模式必须是 JavaScript 或 TypeScript —— 如果显示
Plain Text,按Ctrl+Shift+P→ 输入Change Language Mode→ 手动选对
autoImports 设置没开,补全就静音
npm Intellisense 本身不直接弹模块列表,它依赖 VSCode 的自动导入机制来“撬动”路径补全。关了这个,它连门都敲不开。
- 打开
settings.json(Cmd+, → 右上角“打开设置(JSON)”) - 确保这两行存在且为
true:"javascript.suggest.autoImports": true、"typescript.suggest.autoImports": true - 如果用的是
jsconfig.json或tsconfig.json,也要确认里面没有"allowSyntheticDefaultImports": false这类压制导入行为的配置
冲突扩展会抢走模块名解析权
名字带 Auto Import、Path Intellisense、Import Cost 的扩展,和 npm Intellisense 在同一毫秒内解析同一个 import 行——谁先注册谁说话,后加载的常被静默覆盖。
- 在扩展面板里,**全部禁用**上述同类补全插件
- 禁用后,按
Cmd+Shift+P→ 输入Developer: Restart TS Server并回车 - 新开一个
.js文件,输入import {,看是否弹出模块名候选列表;如果还是没反应,再检查node_modules是否含符号链接(pnpm用户尤其注意)
补全列表全是底层包,业务模块沉底?jsconfig.json 没配好
当 npm Intellisense 扫到 node_modules,它默认平铺所有包——lodash-es、ansi-regex、debug 全堆在前面,你自己的 @utils 或 src/ 别名根本翻不到。
- 在项目根目录加
jsconfig.json(TypeScript 项目用tsconfig.json),内容至少包含:{ "compilerOptions": { "baseUrl": ".", "paths": { "@utils/*": ["src/utils/*"], "@api/*": ["src/api/*"] } }, "include": ["**/*.js", "**/*.ts"], "exclude": ["node_modules"] } -
baseUrl必须是".",不能是"./src"或空字符串;否则 VSCode 语言服务压根不读paths - 改完保存,再执行一次
Developer: Restart TS Server,别指望热更新
最常被忽略的一点:VSCode 的语言服务不会主动扫描子工作区或符号链接嵌套过深的 node_modules。如果你用 pnpm + workspaces,又把 VSCode 打开在 workspace 根而非 package 根,补全就会失效——不是插件问题,是路径根本没对上。











