jsconfig.json
什么是 jsconfig.json?
目录中存在 jsconfig.json
文件表示该目录是 JavaScript 项目的根目录。jsconfig.json
文件指定根文件和JavaScript 语言服务提供的功能的选项。
提示: 如果您不使用 JavaScript,则无需担心
jsconfig.json
。
提示:
jsconfig.json
是 tsconfig.json 的后代,后者是 TypeScript 的配置文件。jsconfig.json
是将"allowJs"
属性设置为true
的tsconfig.json
。
为什么需要 jsconfig.json 文件?
Visual Studio Code 的 JavaScript 支持可以在两种不同的模式下运行
-
文件范围 - 无 jsconfig.json:在此模式下,在 Visual Studio Code 中打开的 JavaScript 文件被视为独立的单元。只要文件
a.js
没有显式引用文件b.ts
(使用import
或 CommonJS 模块),则两个文件之间没有共同的项目上下文。 -
显式项目 - 使用 jsconfig.json:JavaScript 项目是通过
jsconfig.json
文件定义的。目录中存在此类文件表示该目录是 JavaScript 项目的根目录。该文件本身可以选择列出属于该项目的文件、要从项目中排除的文件以及编译器选项(请参见下文)。
当您的工作区中有一个定义项目上下文的 jsconfig.json
文件时,JavaScript 体验会得到改善。因此,当您在新的工作区中打开 JavaScript 文件时,我们会提示您创建一个 jsconfig.json
文件。
jsconfig.json 的位置
我们通过创建一个 jsconfig.json
文件将代码的这一部分(我们网站的客户端)定义为 JavaScript 项目。将该文件放置在 JavaScript 代码的根目录中,如下所示。
在更复杂的项目中,您可能会在工作区中定义多个 jsconfig.json
文件。您会希望这样做,以便一个项目中的代码不会作为 IntelliSense 建议到另一个项目中的代码。下面是一个包含 client
和 server
文件夹的项目示例,显示了两个单独的 JavaScript 项目。
示例
默认情况下,JavaScript 语言服务会分析并为您的 JavaScript 项目中的所有文件提供 IntelliSense。您需要指定要排除或包含哪些文件,以便提供正确的 IntelliSense。
使用 "exclude"
属性
exclude
属性(一个 glob 模式)告诉语言服务哪些文件不是您源代码的一部分。这使性能保持在较高水平。如果 IntelliSense 速度很慢,请将文件夹添加到您的 exclude
列表(如果 VS Code 检测到速度减慢,它会提示您执行此操作)。
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"exclude": ["node_modules"]
}
提示: 您需要
exclude
由构建过程生成的文件(例如,dist
目录)。这些文件会导致建议出现两次,并且会降低 IntelliSense 的速度。
使用 "include"
属性
或者,您可以使用 include
属性(一个 glob 模式)显式设置项目中的文件。如果不存在 include
属性,则默认包括包含目录和子目录中的所有文件。当指定 include
属性时,只包含这些文件。下面是一个带有显式 include
属性的示例。
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"include": ["src/**/*"]
}
提示:
exclude
和include
中的文件路径相对于jsconfig.json
的位置。
jsconfig 选项
以下是 jsconfig
"compilerOptions"
用于配置 JavaScript 语言支持。
提示: 不要被
compilerOptions
混淆,因为 JavaScript 不需要实际编译。此属性的存在是因为jsconfig.json
是tsconfig.json
的后代,后者用于编译 TypeScript。
选项 | 描述 |
---|---|
noLib |
不包括默认库文件 (lib.d.ts) |
target |
指定要使用的默认库 (lib.d.ts)。这些值是 "ES3"、"ES5"、"ES6"、"ES2015"、"ES2016"、"ES2017"、"ES2018"、"ES2019"、"ES2020"、"ES2021"、"ES2022"、"ES2023"、"ESNext"。 |
module |
指定生成模块代码时的模块系统。这些值是 "AMD"、"CommonJS"、"ES2015"、"ES2020"、"ES2022"、"ES6"、"Node16"、"NodeNext"、"ESNext"、"None"、"System"、"UMD"。 |
moduleResolution |
指定如何解析导入的模块。这些值是 "Node"、"Classic"、"Node16"、"NodeNext"、"Bundler"。 |
checkJs |
启用 JavaScript 文件的类型检查。 |
experimentalDecorators |
启用对提议的 ES 修饰符的实验性支持。 |
allowSyntheticDefaultImports |
允许从没有默认导出的模块进行默认导入。这不会影响代码发出,只会影响类型检查。 |
baseUrl |
用于解析非相对模块名称的基本目录。 |
paths |
指定相对于 baseUrl 选项计算的路径映射。 |
您可以在 TypeScript compilerOptions 文档中阅读有关可用 compilerOptions
的更多信息。
使用 webpack 别名
为了使 IntelliSense 与 webpack 别名一起使用,您需要使用 glob 模式指定 paths
键。
例如,对于别名“ClientApp”
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"ClientApp/*": ["./ClientApp/*"]
}
}
}
然后使用别名
import Something from 'ClientApp/foo';
最佳实践
只要有可能,您应该排除那些不属于您的项目源代码的 JavaScript 文件所在的文件夹。
提示: 如果您的工作区中没有
jsconfig.json
文件,VS Code 默认会排除node_modules
文件夹。
下面是一个表格,将常见的项目组件映射到建议排除的安装文件夹。
组件 | 要排除的文件夹 |
---|---|
node |
排除 node_modules 文件夹 |
webpack 、webpack-dev-server |
排除内容文件夹,例如 dist 。 |
bower |
排除 bower_components 文件夹 |
ember |
排除 tmp 和 temp 文件夹 |
jspm |
排除 jspm_packages 文件夹 |
当您的 JavaScript 项目变得过于庞大并且性能下降时,通常是因为像 node_modules
这样的库文件夹。如果 VS Code 检测到您的项目变得过于庞大,它将提示您编辑 exclude
列表。