Visual Studio Code 中的 JavaScript
Visual Studio Code 包含内置的 JavaScript IntelliSense、调试、格式化、代码导航、重构以及许多其他高级语言功能。
这些功能大多开箱即用,而有些可能需要基本配置才能获得最佳体验。本页总结了 VS Code 自带的 JavaScript 功能。VS Code 市场中的扩展可以增强或更改大部分这些内置功能。关于这些功能如何工作以及如何配置的更深入指南,请参阅使用 JavaScript。
IntelliSense (智能感知)
IntelliSense 为您显示智能的代码补全、悬停信息和签名信息,以便您能够更快、更正确地编写代码。
VS Code 在您的 JavaScript 项目中提供 IntelliSense;适用于许多 npm 库,如 React
、lodash
和 express
;以及其他平台,如 node
、无服务器或物联网。
有关 VS Code 的 JavaScript IntelliSense、如何配置它以及解决常见 IntelliSense 问题的帮助,请参阅使用 JavaScript。
JavaScript 项目 (jsconfig.json)
一个 jsconfig.json 文件在 VS Code 中定义了一个 JavaScript 项目。虽然 jsconfig.json
文件不是必需的,但在以下情况下您会希望创建一个:
- 如果并非工作区中的所有 JavaScript 文件都应被视为单个 JavaScript 项目的一部分。
jsconfig.json
文件允许您从 IntelliSense 中排除某些文件。 - 为了确保工作区中的一部分 JavaScript 文件被视为单个项目。这在您处理使用隐式全局依赖而不是
imports
来处理依赖的旧代码时非常有用。 - 如果您的工作区包含多个项目上下文,例如前端和后端 JavaScript 代码。对于多项目工作区,请在每个项目的根文件夹中创建一个
jsconfig.json
文件。 - 您正在使用 TypeScript 编译器将 JavaScript 源代码降级编译。
要定义一个基本的 JavaScript 项目,请在工作区的根目录下添加一个 jsconfig.json
文件:
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"exclude": ["node_modules"]
}
关于更高级的 jsconfig.json
配置,请参阅使用 JavaScript。
要检查一个 JavaScript 文件是否属于 JavaScript 项目,只需在 VS Code 中打开该文件并运行 JavaScript: 转到项目配置命令。此命令会打开引用该 JavaScript 文件的 jsconfig.json
。如果文件不属于任何 jsconfig.json
项目,则会显示通知。
代码片段
VS Code 包含基本的 JavaScript 代码片段,在您输入时会提供建议;
有许多扩展提供了额外的代码片段,包括流行框架(如 Redux 或 Angular)的代码片段。您甚至可以定义自己的代码片段。
要禁用代码片段建议,请在您的设置文件中将 editor.snippetSuggestions 设置为 "none"
。editor.snippetSuggestions 设置还允许您更改代码片段在建议中出现的位置:顶部("top"
)、底部("bottom"
)或按字母顺序内联排序("inline"
)。默认值为 "inline"
。
JSDoc 支持
VS Code 理解许多标准的 JSDoc 注释,并使用这些注释来提供丰富的 IntelliSense。您甚至可以选择使用 JSDoc 注释中的类型信息来对您的 JavaScript 进行类型检查。
在函数声明前输入 /**
,然后选择 JSDoc 注释代码片段建议,即可快速为函数创建 JSDoc 注释。
要禁用 JSDoc 注释建议,请设置 "javascript.suggest.completeJSDocs": false
。
悬停信息
将鼠标悬停在 JavaScript 符号上,可以快速查看其类型信息和相关文档。
⌘K ⌘I (Windows, Linux Ctrl+K Ctrl+I) 键盘快捷键可以在当前光标位置显示此悬停信息。
签名帮助
当您编写 JavaScript 函数调用时,VS Code 会显示有关函数签名的信息,并高亮显示您当前正在完成的参数。
当您在函数调用中输入 (
或 ,
时,签名帮助会自动显示。按 ⇧⌘Space (Windows, Linux Ctrl+Shift+Space) 可手动触发签名帮助。
自动导入
自动导入通过建议您整个项目及其依赖项中的可用变量来加快编码速度。当您选择其中一个建议时,VS Code 会自动在文件顶部为它添加一个 import。
只需开始输入,即可看到对您当前项目中所有可用 JavaScript 符号的建议。自动导入建议会显示它们将从何处导入。
如果您选择其中一个自动导入建议,VS Code 会为其添加一个导入。
在此示例中,VS Code 在文件顶部添加了一个从 material-ui 导入 Button
的语句。
要禁用自动导入,请将 "javascript.suggest.autoImports"
设置为 false
。
VS Code 会尝试推断出最佳的导入样式。您可以使用 javascript.preferences.quoteStyle 和 javascript.preferences.importModuleSpecifier 设置,明确配置添加到代码中的导入的首选引号样式和路径样式。
粘贴时添加导入
当您在编辑器之间复制和粘贴代码时,VS Code 可以在粘贴代码时自动添加导入。当您粘贴包含未定义符号的代码时,会显示一个粘贴控件,让您选择是粘贴为纯文本还是添加导入。
此功能默认启用,但您可以通过切换 javascript.updateImportsOnPaste.enabled 设置来禁用它。
您可以通过配置 editor.pasteAs.preferences 设置,使带导入的粘贴成为默认行为,而不显示粘贴控件。包含 text.updateImports.jsts
或 text.updateImports
可以在粘贴时始终添加导入。
组织导入
组织导入源操作会对 JavaScript 文件中的导入进行排序,并移除任何未使用的导入。
您可以从源操作上下文菜单中运行组织导入,或使用键盘快捷键 ⇧⌥O (Windows, Linux Shift+Alt+O)。
通过设置,也可以在保存 JavaScript 文件时自动组织导入:
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
文件移动时更新导入
当您移动或重命名被 JavaScript 项目中其他文件导入的文件时,VS Code 可以自动更新所有引用该移动文件的导入路径。
javascript.updateImportsOnFileMove.enabled 设置控制此行为。有效的设置值是:
"prompt"
- 默认值。每次文件移动时询问是否应更新路径。"always"
- 始终自动更新路径。"never"
- 不自动更新路径,也不提示。
格式化
VS Code 的内置 JavaScript 格式化程序提供了基本的代码格式化功能,并带有合理的默认值。
javascript.format.*
设置可配置内置的格式化程序。或者,如果内置格式化程序妨碍了您,可将 "javascript.format.enable"
设置为 false
以禁用它。
对于更专业的代码格式化样式,请尝试从市场安装一个 JavaScript 格式化扩展。
JSX 和自动闭合标签
VS Code 的所有 JavaScript 功能也适用于 JSX。
您可以在普通的 *.js
文件和 *.jsx
文件中使用 JSX 语法。
VS Code 还包含 JSX 特有的功能,例如自动闭合 JSX 标签。
将 "javascript.autoClosingTags"
设置为 false
可禁用 JSX 标签自动闭合。
代码导航
代码导航让您能够快速地在 JavaScript 项目中导航。
- 转到定义 F12 - 转到符号定义的源代码。
- 速览定义 ⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10) - 弹出一个速览窗口,显示符号的定义。
- 转到引用 ⇧F12 (Windows, Linux Shift+F12) - 显示符号的所有引用。
- 转到类型定义 - 转到定义符号的类型。对于类的实例,这将显示类本身,而不是实例的定义位置。
您可以通过命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的转到符号命令来进行符号搜索导航。
- 转到文件中的符号 ⇧⌘O (Windows, Linux Ctrl+Shift+O)
- 转到工作区中的符号 ⌘T (Windows, Linux Ctrl+T)
重命名
按 F2 可在您的 JavaScript 项目中重命名光标下的符号。
重构
VS Code 为 JavaScript 提供了一些方便的重构功能,例如提取函数和提取常量。只需选择您想要提取的源代码,然后点击边栏中的灯泡图标或按 (⌘. (Windows, Linux Ctrl+.)) 查看可用的重构。
可用的重构包括:
- 提取为方法或函数。
- 提取为常量。
- 在命名导入和命名空间导入之间转换。
- 移动到新文件。
有关重构以及如何为单个重构配置键盘快捷键的更多信息,请参阅重构。
此外,代码操作小部件:包括附近的快速修复 (editor.codeActionWidget.includeNearbyQuickFixes) 是一个默认启用的设置,它会从 ⌘. (Windows, Linux Ctrl+.)(命令 ID editor.action.quickFix
)激活一行中最近的快速修复,无论您的光标在该行的哪个位置。
该命令会突出显示将通过快速修复进行重构或修复的源代码。普通代码操作和非修复重构仍可在光标位置激活。
未使用的变量和无法访问的代码
未使用的 JavaScript 代码,例如一个恒为 true 的 if
语句的 else 块或未引用的导入,会在编辑器中淡出显示。
您可以将光标放在这些未使用的代码上,并触发快速修复命令 (⌘. (Windows, Linux Ctrl+.)) 或点击灯泡图标,来快速移除它们。
要禁用未使用代码的淡出显示,请将 "editor.showUnused"
设置为 false
。您也可以通过以下设置仅在 JavaScript 中禁用未使用代码的淡出显示:
"[javascript]": {
"editor.showUnused": false
},
"[javascriptreact]": {
"editor.showUnused": false
},
保存时代码操作
editor.codeActionsOnSave 设置允许您配置一组在文件保存时运行的代码操作。例如,您可以通过以下设置在保存时启用组织导入:
// On explicit save, run fixAll source action. On auto save (window or focus change), run organizeImports source action.
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "always",
}
截至目前,支持以下枚举值:
explicit
(默认):在明确保存时触发代码操作。与true
相同。always
:明确保存时以及窗口或焦点更改的自动保存时触发代码操作。never
:从不触发保存时的代码操作。与false
相同。
您也可以将 editor.codeActionsOnSave 设置为一个代码操作数组,以按顺序执行。
以下是一些源操作:
"organizeImports"
- 在保存时启用组织导入。"fixAll"
- 保存时自动修复会一次性计算所有可能的修复(适用于包括 ESLint 在内的所有提供程序)。"fixAll.eslint"
- 仅对 ESLint 进行自动修复。"addMissingImports"
- 在保存时添加所有缺少的导入。
更多信息请参阅 Node.js/JavaScript。
代码建议
VS Code 会自动建议一些常见的代码简化,例如将 promise 上的 .then
调用链转换为使用 async
和 await
。
将 "javascript.suggestionActions.enabled"
设置为 false
以禁用建议。
使用 AI 增强补全
GitHub Copilot 是一款由 AI 驱动的代码补全工具,可帮助您更快、更智能地编写代码。您可以在 VS Code 中使用 GitHub Copilot 扩展来生成代码,或从其生成的代码中学习。
GitHub Copilot 为多种语言和各种框架提供建议,在 Python、JavaScript、TypeScript、Ruby、Go、C# 和 C++ 方面表现尤为出色。
你可以在Copilot 文档中了解更多关于如何开始使用 Copilot 的信息。
安装并启用 Copilot 扩展后,您可以在您的 JavaScript 项目中进行测试。
创建一个新文件——您可以使用命令面板 (F1) 中的文件:新建文件命令。
在 JavaScript 文件中,键入以下函数头:
function calculateDaysBetweenDates(begin, end) {
Copilot 将提供如下建议——使用 Tab 键接受建议:
内联提示
内联提示为源代码添加额外的内联信息,以帮助您理解代码的功能。
参数名内联提示显示函数调用中参数的名称。
这可以帮助您一目了然地理解每个参数的含义,这对于接受布尔标志或参数容易混淆的函数特别有用。
要启用参数名提示,请设置 javascript.inlayHints.parameterNames
。有三个可能的值:
none
— 禁用参数内联提示。literals
— 仅对字面量(字符串、数字、布尔值)显示内联提示。all
— 对所有参数显示内联提示。
变量类型内联提示显示没有显式类型注释的变量的类型。
设置:javascript.inlayHints.variableTypes.enabled
属性类型内联提示显示没有显式类型注释的类属性的类型。
设置:javascript.inlayHints.propertyDeclarationTypes.enabled
参数类型提示显示隐式类型参数的类型。
设置:javascript.inlayHints.parameterTypes.enabled
返回类型内联提示显示没有显式类型注释的函数的返回类型。
设置:javascript.inlayHints.functionLikeReturnTypes.enabled
引用 CodeLens
JavaScript 引用 CodeLens 为类、方法、属性和导出的对象显示内联的引用计数。
要启用引用 CodeLens,请将 "javascript.referencesCodeLens.enabled"
设置为 true
。
点击引用计数可快速浏览引用列表。
Linter (代码检查工具)
Linter 会对可疑的代码发出警告。虽然 VS Code 不包含内置的 JavaScript linter,但市场上有许多 JavaScript linter 扩展。
此列表是从VS Code 市场动态查询的。请阅读描述和评论,以决定该扩展是否适合您。
类型检查
您也可以在常规的 JavaScript 文件中利用 TypeScript 的一些高级类型检查和错误报告功能。这是捕获常见编程错误的好方法。这些类型检查还为 JavaScript 启用了一些令人兴奋的快速修复功能,包括添加缺失的导入和添加缺失的属性。
TypeScript 尝试像在 .ts
文件中一样在 .js
文件中推断类型。当无法推断类型时,可以使用 JSDoc 注释明确指定。您可以在使用 JavaScript中阅读更多关于 TypeScript 如何使用 JSDoc 进行 JavaScript 类型检查的内容。
JavaScript 的类型检查是可选的,需要主动选择加入。现有的 JavaScript 验证工具(如 ESLint)可以与内置的类型检查功能一起使用。
调试
VS Code 为 JavaScript 提供了强大的调试支持。可以设置断点、检查对象、导航调用堆栈以及在调试控制台中执行代码。要了解更多信息,请参阅调试主题。
调试客户端
您可以使用浏览器调试器(例如我们为 Edge 和 Chrome 内置的调试器,或Firefox 调试器)来调试您的客户端代码。
调试服务器端
在 VS Code 中使用内置调试器调试 Node.js。设置简单,并有Node.js 调试教程来帮助您。
热门扩展
VS Code 自带对 JavaScript 的出色支持,但您还可以通过扩展安装调试器、代码片段、linter 和其他 JavaScript 工具。
上面显示的扩展是动态查询的。点击上面的扩展磁贴,阅读描述和评论,以决定哪个扩展最适合您。在市场中查看更多。
后续步骤
继续阅读以了解:
- 使用 JavaScript - 有关 VS Code 的 JavaScript 支持以及如何排查常见问题的更详细信息。
- jsconfig.json -
jsconfig.json
项目文件的详细说明。 - IntelliSense - 了解有关 IntelliSense 的更多信息以及如何为您的语言有效使用它。
- 调试 - 了解如何为你的应用程序设置调试。
- Node.js - 创建 Express Node.js 应用程序的演练。
- TypeScript - VS Code 对 TypeScript 有很好的支持,它为您的 JavaScript 代码带来了结构和强类型。
常见问题
VS Code 是否支持 JSX 和 React Native?
VS Code 支持 JSX 和 React Native。您将通过从 npmjs 类型声明文件仓库自动下载的类型声明 (typings) 文件获得对 React/JSX 和 React Native 的 IntelliSense。此外,您还可以从市场安装热门的 React Native 扩展。
要为 React Native 启用 ES6 导入语句,您需要将 allowSyntheticDefaultImports
编译器选项设置为 true
。这会告诉编译器创建合成的默认成员,然后您就可以获得 IntelliSense。React Native 在幕后使用 Babel 来创建带有默认成员的正确运行时代码。如果您还想调试 React Native 代码,可以安装 React Native 扩展。
VS Code 是否支持 Dart 编程语言和 Flutter 框架?
是的,VS Code 有用于 Dart 和 Flutter 开发的扩展。您可以在 Flutter.dev 文档中了解更多信息。
IntelliSense 对外部库不起作用
自动类型获取
适用于通过 npm 下载的依赖项(在 package.json
中指定)、Bower(在 bower.json
中指定),以及您文件夹结构中列出的许多最常见的库(例如 jquery-3.1.1.min.js
)。
ES6 风格的导入不起作用。
当您想使用 ES6 风格的导入,但某些类型声明(typings)文件尚未使用 ES6 风格的导出时,请将 TypeScript 编译器选项 allowSyntheticDefaultImports
设置为 true。
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6",
// This is the line you want to add
"allowSyntheticDefaultImports": true
},
"exclude": ["node_modules", "**/node_modules/*"]
}
我可以调试压缩/丑化过的 JavaScript 吗?
是的,可以。您可以在Node.js 调试主题中使用 JavaScript source map 看到这一功能。
在使用非 ES6 构造时,如何禁用语法验证?
一些用户希望使用像提议中的管道 (|>
) 运算符这样的语法结构。然而,这些目前不被 VS Code 的 JavaScript 语言服务支持,并被标记为错误。对于仍希望使用这些未来功能的用户,我们提供了 javascript.validate.enable 设置。
使用 javascript.validate.enable: false
,您可以禁用所有内置的语法检查。如果您这样做,我们建议您使用像 ESLint 这样的 linter 来验证您的源代码。
我可以使用其他 JavaScript 工具,如 Flow 吗?
是的,但是 Flow 的一些语言功能,如类型和错误检查,可能会与 VS Code 内置的 JavaScript 支持产生冲突。要了解如何禁用 VS Code 的内置 JavaScript 支持,请参阅禁用 JavaScript 支持。