应将 TypeScript 和 JavaScript 的 importModuleSpecifier 均设为 "relative",删除 jsconfig.json/tsconfig.json 中的 baseUrl(或确保 paths 为空),并在 compilerOptions 中启用 "updateImportsOnFileMove": "always"。

自动导入默认用绝对路径?先关掉 typescript.preferences.importModuleSpecifier
VSCode 的 TypeScript 快速修复(Ctrl+.)默认可能生成类似 import { foo } from "src/utils/foo" 的绝对路径,这不是相对路径,也不是你项目里常用的 ../utils/foo。根本原因是 typescript.preferences.importModuleSpecifier 默认值是 "auto",而它在有 baseUrl + paths 时会优先走别名路径。
要强制走相对路径,必须显式设为 "relative":
- 打开设置(
Ctrl+,),搜importModuleSpecifier - 把
TypeScript > Preferences: Import Module Specifier改成relative - 或者直接改
settings.json:"typescript.preferences.importModuleSpecifier": "relative"
注意:这个设置只影响「新生成的 import」,不影响已有代码;且对 JavaScript 文件无效(需额外配 javascript.preferences.importModuleSpecifier)。
JavaScript 也要同步设 javascript.preferences.importModuleSpecifier
如果你项目是 JS 或混合 TS/JS,光配 TypeScript 不够。VSCode 对 JS 的自动导入走的是另一套语言服务,必须单独开:
- 设置里搜
javascript.preferences.importModuleSpecifier - 同样设为
"relative" - 对应
settings.json行:"javascript.preferences.importModuleSpecifier": "relative"
不配这项,.js 文件里按 Ctrl+. 仍可能生成 import ... from "./foo"(看起来像相对路径),但实际逻辑受 jsconfig.json 影响更大——如果里面写了 baseUrl,它又可能回退到别名路径。
jsconfig.json 或 tsconfig.json 里别乱写 baseUrl
很多人以为加了 "baseUrl": "." 就能支持路径别名,结果反而让自动导入绕过相对路径。真相是:baseUrl 一旦存在,VSCode 就会尝试把路径映射成别名(哪怕没配 paths),导致 importModuleSpecifier: "relative" 失效。
所以,除非你真在用 @/components 这类别名,否则建议:
- 删掉
jsconfig.json/tsconfig.json中的baseUrl字段 - 如果必须保留(比如配合构建工具),就确保
paths是空对象或完全不配,避免干扰 - 改完配置后,务必重启 TS Server(
Ctrl+Shift+P→Restart TS server)
重命名文件时路径没更新?检查 compilerOptions.updateImportsOnFileMove
自动导入路径规则和「重命名文件时是否更新 import」是两件事。即使你设好了 importModuleSpecifier: "relative",F2 重命名一个文件后,其他地方的 import 仍可能卡在旧路径。
解决办法是补上编译器级开关:
- 在
tsconfig.json或jsconfig.json的compilerOptions里加:"updateImportsOnFileMove": "always"
- 值可选
"always"、"prompt"或"never";推荐"always"省心 - 这个字段只在 TypeScript 4.4+ 和较新版本的 JS 语言服务中生效,老版本 VSCode 可能无视
这个配置不会影响「自动导入生成什么路径」,但它决定了「已存在的 import 是否跟着文件一起动」——漏掉它,相对路径规则再准也没用,因为引用根本没刷新。
真正容易被忽略的是:这三个点(importModuleSpecifier、baseUrl 干扰、updateImportsOnFileMove)必须同时对齐,缺一不可。尤其是 baseUrl,看着像基础配置,实则是相对路径规则的隐形开关。


















