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
列表。