jsconfig 详解

jsconfig 详解

一、为什么需要 jsconfig.json

JavaScript 项目通过 jsconfig.json 文件定义。目录中出现这样的文件表明该目录是 JavaScript 项目的根目录。
文件本身可以选择列出属于项目的文件、要从项目中排除的文件以及编译器选项(见下文)。
当工作区中有一个 jsconfig.json 文件来定义项目上下文时,JavaScript 体验会得到改善。

默认情况下,jsconfig.json 将为您的 JavaScript 项目文件提供 IntelliSense 配置,包括提供正确的智能感知,指定要排除或包含哪些文件等。

二、jsconfig.json 的位置

jsconfig.json

{
  "compilerOptions": {
    // 用于解析非相关模块名称的基目录。
    "baseUrl": "./",
    // 指定相对于 baseUrl 选项计算的路径映射。
    "paths": {
        "@/*": ["src/*"]
    }
  },
  // 该exclude属性(全局模式)告诉语言服务哪些文件不属于您的源代码。这使性能保持在高水平。
  "exclude": ["node_modules", "dist"]
}

在更复杂的项目中,您可能在工作区中定义了多个 jsconfig.json 文件,这样一个项目中的代码就不会被建议作为 IntelliSense 在另一个项目中进行编码。

三、配置说明

3.1、compilerOptions

jsconfig.json 使用 compilerOptions 来配置 JavaScript 语言支持,该配置具有以下属性:

  • nolib 不要包含默认的库文件(lib.d.ts)。
  • target 指定要使用的默认库(lib.d.ts)。值为 “es3”, “es5”, “es6”, “es2015”, “es2016”, “es2017”, “es2018”, “es2019”, “es2020”, “esnext”。
  • module 在生成模块代码时指定模块系统。值为“ amd”、“ commonJS”、“ es2015”、“ es6”、“ esnext”、“ none”、“ system”、“ umd”。
  • moduleResolution 指定如何解析导入模块。值为“node”和“classic”。
  • checkJs 启用 JavaScript 文件的类型检查。
  • experimentalDecorators 为提议的 ES 装饰器提供实验支持。
  • allowSyntheticDefaultImports 允许从没有默认导出的模块进行默认导入。这不影响代码,只是进行类型检查。
  • baseUrl 指定模块基础目录。
  • paths 指定相对于模块路径别名映射。

提示: 不要被 compilerOptions 搞糊涂了。 这个属性之所以存在,是因为 jsconfig.jsontsconfig.json 的后代,后者用于编译打字稿。

3.2、exclude 属性

Exclude 属性(glob 模式)告诉语言服务哪些文件不是源代码的一部分。 这使性能保持在一个高水平。 如果 IntelliSense 速度慢,则向排除列表添加文件夹(如果检测到速度慢,VS 代码将提示您这样做)。

{
    "exclude": [
        "node_modules",
        "dist"
    ]
}

以上就排除了构建过程依赖文件(node_modules)和生成的文件(dist 目录), 这些文件将导致建议显示两次,并将减缓智能感知,排除了这些文件可以提高 vscode 的性能。

3.3、include属性

同样,可以使用 include 属性(glob 模式)显式地设置项目中的文件。
如果没有 include 属性,则默认情况下包含包含目录和子目录中的所有文件。 如果指定了 include 属性,则只包含这些文件。 下面是一个带有明确 include 属性的示例。

{
    "include": [
        "src/**/*"
    ]
}

提示: exclude 和 include 中的文件路径相对于 jsconfig.json 的位置。

3.4、配置 webpack 别名

要使用 webpack 别名。,智能感知需要使用 glob 模式指定路径键。
在 paths 配置下设置 @component 别名。

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}

然后在项目中引用别名。

import '@/styles/index.scss'

参考:
https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

评论

暂无

添加新评论