jsconfig 配置的作用

  • 在某个目录放一个 jsconfig.json,VS Code 就把它当作JavaScript 项目根。文件里定义项目包含的源文件语言服务选项,从而影响智能提示、自动导入、转到定义、错误检查等编辑器体验。(Visual Studio Code)
  • VS Code 没有 jsconfig 也能工作,但当你的工作区里并非所有 JS 文件都属于同一个项目,或需要路径别名/包含范围等配置时,就应该创建它。(Visual Studio Code)
  • 它本质上是 tsconfig.json 的“JS 版变体”,只作用于编辑器的 JS/JSX 语言服务(不参与打包)。(Visual Studio Code)

为什么/什么时候需要

VS Code JS 支持有两种模式:

  • File Scope(无 jsconfig):每个文件独立,没有统一的项目上下文。
  • Explicit Project(有 jsconfig):用 jsconfig.json 明确项目边界与解析规则。 当你需要更准确的 IntelliSense、跨文件跳转、非相对导入/别名,建议使用 jsconfig。(GitHub)

常用配置项(高频)

  • include / exclude:工程边界。只把 src/ 等需要的目录纳入项目。(Visual Studio Code)
  • compilerOptions.baseUrl + paths:配置路径别名(如 @/),让 VS Code 能解析到定义并提供自动导入。(Visual Studio Code)
  • checkJs:对 .js/.jsxTS 级别类型检查(配合 JSDoc 与 .d.ts)以发现更多类型错误。(Visual Studio Code)
  • jsx:设置 JSX 处理方式(如 React 17+ 的 react-jsx)。(Visual Studio Code)
  • 其他常见:modulemoduleResolutionresolveJsonModuletypes 等,影响编辑器如何解析模块与可见的全局类型(例如 Node/React)。(Visual Studio Code)

小技巧:用命令面板 JavaScript: Go to Project Configuration 可检查当前文件是否被某个 jsconfig.json 管理。(Visual Studio Code)

与 tsconfig 的关系

  • 语义上:jsconfig.jsontsconfig.json 的子集/对应物,用于纯 JS 项目;TS 项目应只维护 tsconfig.json(不要两者并存,避免冲突)。(Visual Studio Code)

常见坑

  • jsconfiginclude 没覆盖源码(如漏了 src/),会导致“转到定义/自动导入”异常。(Visual Studio Code)
  • 配了打包器 alias(如 Rsbuild/Vite/Webpack),却没在 jsconfig 同步 baseUrl/paths,编辑器跳转会失效(打包能过但编辑器不认)。(Visual Studio Code)
  • 开启 checkJs 后导入 *.scss*.jpg 等非 JS 资源需要 .d.ts 声明,不然会报“找不到模块/类型声明”。这是语言服务在做类型检查的预期行为。(Visual Studio Code)

和 Biome/ESLint/打包器的区别

维度 jsconfig.json Biome
主要作用 配置 VS Code JavaScript 语言服务:项目边界、路径解析、类型检查选项(checkJs)等 格式化 + Lint 工具:风格统一、可疑代码模式、自动修复等
生效位置 编辑器内(tsserver),不参与打包 CLI/编辑器/CI,检查并修复代码风格与部分问题
能否做类型检查 可(对 JS 通过 checkJs+JSDoc/类型声明) 以规则式静态检查为主;不是完整的类型系统
是否影响打包 否(与 bundler 配置分离)
  • Biome 的定位是超快的格式化器 + Linter,替代 Prettier/ESLint 组合;它强调“格式化由 formatter 处理,lint 规则不覆盖格式化”,并提供大量分组规则与自动修复。(Biome)
  • Biome 不提供像 TS 那样的完整类型推断/检查;jsconfigcheckJs 则能把 .js/.jsx 纳入类型检查(配合 JSDoc 与声明),捕获 API 误用、形状不匹配等类型问题。(Visual Studio Code)
  • 二者是互补关系:Biome 保证风格/常见陷阱;jsconfig 让编辑器理解你的项目结构与别名,并在需要时提供类型层面的保护。(Visual Studio Code)

给你的一份实用模板(纯 JS + React)

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": { "@/*": ["src/*"] },
    "jsx": "react-jsx",
    "checkJs": true,                 // 若暂不想要类型错误,可设为 false
    "module": "ESNext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "types": ["react", "react-dom", "node"]
  },
  "include": ["src"],
  "exclude": ["dist", "node_modules"]
}

如果你开启了 checkJs,并且会 import './x.scss' 或图片等静态资源,请加一份最小的 assets.d.ts(告诉编辑器这些模块的“类型”),以避免无意义报错。(Visual Studio Code)