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 的位置
我们将这部分代码,即我们网站的客户端,定义为一个JavaScript项目,通过创建一个jsconfig.json文件。将该文件放在你的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 选项
以下是用于配置 JavaScript 语言支持的 jsconfig "compilerOptions"。
提示:不要被
compilerOptions所迷惑,因为JavaScript不需要实际的编译。这个属性存在是因为jsconfig.json是tsconfig.json的后代,后者用于编译TypeScript。
| Option | Description |
|---|---|
noLib |
Do not include the default library file (lib.d.ts) |
target |
Specifies which default library (lib.d.ts) to use. The values are "ES3", "ES5", "ES6", "ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "ES2021", "ES2022", "ES2023", "ESNext". |
module |
Specifies the module system, when generating module code. The values are "AMD", "CommonJS", "ES2015", "ES2020", "ES2022", "ES6", "Node16", "NodeNext", "ESNext", "None", "System", "UMD". |
moduleResolution |
Specifies how modules are resolved for imports. The values are "Node", "Classic", "Node16", "NodeNext", "Bundler". |
checkJs |
Enable type checking on JavaScript files. |
experimentalDecorators |
Enables experimental support for proposed ES decorators. |
allowSyntheticDefaultImports |
Allow default imports from modules with no default export. This does not affect code emit, just type checking. |
baseUrl |
Base directory to resolve non-relative module names. |
paths |
Specify path mapping to be computed relative to baseUrl option. |
您可以阅读更多关于可用的compilerOptions在TypeScript compilerOptions 文档中。
使用 webpack 别名
为了使IntelliSense与webpack别名一起工作,您需要使用glob模式指定paths键。
例如,对于别名 'ClientApp':
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"ClientApp/*": ["./ClientApp/*"]
}
}
}
然后使用别名
import Something from 'ClientApp/foo';
最佳实践
尽可能排除不属于项目源代码的JavaScript文件所在的文件夹。
提示: 如果你的工作区中没有
jsconfig.json文件,VS Code 默认会排除node_modules文件夹。
以下是一个表格,将常见的项目组件映射到建议排除的安装文件夹:
| Component | folder to exclude |
|---|---|
node |
exclude the node_modules folder |
webpack, webpack-dev-server |
exclude the content folder, for example dist. |
bower |
exclude the bower_components folder |
ember |
exclude the tmp and temp folders |
jspm |
exclude the jspm_packages folder |
当你的JavaScript项目变得太大且性能变慢时,通常是因为像node_modules这样的库文件夹。如果VS Code检测到你的项目变得太大,它会提示你编辑exclude列表。