VSCode未检出MODULE_NOT_FOUND错误读取全局类型定义如何修复
你此前在home目录误执行npm init -y的操作确实是导致该问题的诱因之一。
TypeScript(VSCode的JS/TS语法校验默认基于TS服务)的模块解析逻辑默认会从当前文件所在目录开始,逐层向上查找node_modules文件夹内的依赖和类型定义,同时默认开启了「自动类型获取」功能,会将常用库的类型定义下载到~/.cache/typescript/的全局缓存目录中,即使你删除了home目录下的package.json,已经下载到全局缓存的@types/express类型包仍然存在,因此TS服务找到该类型定义后就不会抛出依赖缺失的报错。
修复步骤
- 第一步:清理全局TypeScript类型缓存
执行命令删除全局缓存的所有类型包:
同时检查home目录是否有遗留的rm -rf ~/.cache/typescript/node_modules文件夹,如有一并删除:rm -rf ~/node_modules - 第二步:配置项目解析规则,限制类型查找路径
在当前工作目录根目录新建jsconfig.json(纯JS项目)或tsconfig.json(TS项目),添加如下配置:
其中{ "compilerOptions": { "moduleResolution": "node", "typeRoots": ["./node_modules/@types"], "allowJs": true, "noImplicitAny": true }, "include": ["./**/*"] }typeRoots配置明确指定仅从当前项目的node_modules/@types查找类型定义,不会向上查找父目录或全局路径。 - 第三步:关闭VSCode自动类型获取功能
打开VSCode设置,搜索typescript.disableAutomaticTypeAcquisition,勾选该选项,禁用TS服务自动下载全局类型包的行为。 - 第四步:重启TS服务生效
按下快捷键Ctrl+Shift+P(Mac系统为Cmd+Shift+P),输入并执行TypeScript: Restart TS Server,重启后再引用未安装的依赖就会正常显示红色下划线报错。
内容的提问来源于stack exchange,提问作者snu
相关产品推荐
相关产品推荐

