vscode.extensions-插件入门

VSCode Extensions入门:基本概念与激活事件
本文是VSCode扩展开发的入门教程,介绍了扩展的三种类别:Extensions、Language Servers、Debuggers,强调了扩展的隔离性和激活事件的作用。激活事件包括onLanguage、onCommand、onDebug等,用于在特定条件下加载扩展。此外,文章还概述了扩展清单文件和扩展点的概念。

写在前面

工作中需要为vscode编写几个extension,查了不少资料,包括官网的API和示例,但是感觉不是特别适合入门者,所以打算写一个关于vscode extensions系列的文章。

在您读这篇文章的时候,我默认您已经安装了vscode和nodejs的开发环境。如果还没有安装nodejs,我想这篇文章Node.js安装配置-菜鸟网可能对您有所帮助。

vscode有入门的例子可供参看,理解vscode官方给的示例对于我们编写extensions很有帮助。

注:本文只介绍基本概念,下一篇文章介绍代码及API。

基本概念

了解vscode extensions的基本概念,能够帮助我们更好的写vscode的扩展。

1. 简介(Overview)

扩展有三种基本的类别:
- Extensions - 最基础的类别
- Language Servers - 通过 Language Server Protocol 增强编辑体验
- Debuggers - 和调试有关

Extensions

所有的扩展被激活后都运行在扩展进程(extension host process)中的,这个单独的进程可以保证VS代码始终保持响应,避免扩展出错导致IDE崩溃。

扩展支持(Extensions include support for):
- Activation - 检测到特定的文件类型、存在特定文件、通过命令选项版选择一个命令(a command is selected via the Command Palette)或者组合键(a key combination)时,加载一个扩展
- Editor - 和编辑器内容有关
- Workspace - 访问开放式编辑器、状态栏、信息消息等
- Eventing - 和编辑器生命周期有关,比如: open, close, change, and more
- Evolved editing - 创建丰富的语言支持提供程序,包括 IntelliSense, Peek, Hover, Diagnostics 等等

Language Servers

语言服务器是一种特殊的扩展,它为VS Code中的多种语言提供更好的编辑体验。 使用语言服务器,您可以实现跳转到定义,自动完成,错误检查以及VS Code中支持的许多其他语言功能。

Language Server is a special kind of extension that powers the editing experience for many languages in VS Code. With language servers, you can implement jump-to-definitions, autocomplete, error-checking and many other language features supported in VS Code.

Debug Adapter

vscode实现了一个通用的调试器UI,调试器有自己专用的进程。

VS Code implements a generic debugger UI and relies on debugger extensions and so called “debug adapters” to connect the debug UI to a real debugger or runtime. A debug adapter is a dedicated process that communicates with VS Code through the VS Code Debug Protocol and can be implemented in any language.

本节参考:Overview

2. 可扩展性原则和模式
核心概念

vs code 提供扩展功能的时候,会考虑很多因素,以下是vscode核心决策的背景:
- 稳定性 - 扩展隔离(Stability - Extension Isolation)
- 扩展是运行在独立的进程(extension host process)中的,目的是为了避免扩展影响vs code的性能和稳定性,特别是启动时间。
- 这种架构可以保证vs code随时响应用户的操作,无论扩展在做什么。
- 性能 - 扩展激活(Performance - Extension Activation)
- 扩展会尽肯能晚的被加载,未使用的扩展不会被加载,因此不会消耗内存。为了支持延迟触发扩展,vscode定义了激活事件。
- 扩展清单(Extension Manifest)
- 为了延迟加载扩展,vscode需要一个扩展清单文件(package.json)为其提供特定字段,这其中包括激活事件和扩展点,vscode在启动时会读取清单并准备相对应的UI。
- 可扩展性API(Extensibility API)
- vscode不向扩展程序提供修改DOM的能力。
- 基于协议的扩展(Protocol based extensions)
- VS Code中一个常见的扩展方式是在一个独立的进程中执行扩展代码,并通过协议和VS Code通信。

扩展模式

VS Code中的扩展API遵循一些在所有API中应用的指导模式:
- Promises
- VS Code使用Promises处理异步。
- 取消令牌(Cancellation Tokens)
- 通常操作是在不稳定的状态下启动的,在操作完成之前会发生变化。有这种行为的API会传递一个CancellationToken,你可以检查是否取消或者在取消是获取通知,取消令牌通常是函数调用的最后一个参数,是可选的。
- Disposables
- The VS Code API uses the dispose pattern for resources that are obtained from VS Code. This applies to event listening, commands, interacting with the UI, and various language contributions.
- Events
- VS Code API中的函数,可以使用侦听器函数来订阅这些函数,返回一个一次性的事件侦听器,可以在处理事件后删除该事件侦听器。
- 事件命名遵循on[Will|Did]VerbNoun?模式,
- Strict null
- Using Node.js Modules with Extensions
- 你可以在扩展中使用NodeJS模块,与Node项目类似,你可以将这些依赖添加到包中,在 package.json 使用 dependencies 字段。
- VS Code不会安装扩展总需要的依赖,因此你需要在发布之前安装到扩展中。

本节参考: patterns-and-principles

3. 激活事件(Activation Events)

vscode提供一下激活方式:

onLanguage:${language}
onCommand:${command}
onDebug
workspaceContains:${toplevelfilename}
onFileSystem:${scheme}
onView:${viewId}
*
activationEvents.onLanguage
  • 当某种语言的文件被打开时,该扩展就会被激活。
  • 该扩展使用语言标记符(a language identifier value)。
  • 可以在activationEvents数组中声明多种语言。
"activationEvents": [
    "onLanguage:json",
    "onLanguage:markdown",
    "onLanguage:typescript"
]
activationEvents.onCommand
  • 调用命令就会激活该扩展。
"activationEvents": [
    "onCommand:extension.sayHello"
]
activationEvents.onDebug
  • 启动调试之前会激活该事件。
"activationEvents": [
    "onDebug"
]

还有两个更细粒度的激活事件:
- onDebugInitialConfigurations:在调用DebugConfigurationProviderprovideDebugConfigurations方法之前会被调用
- onDebugResolve:type:在调用DebugConfigurationProviderresolveDebugConfiguration方法之前会被调用

  • 经验法则:如果该调试扩展是轻量级的,就使用onDebug。 如果是重量级的,就使用onDebugInitialConfigurations或者onDebugResolve,使用哪一个取决于DebugConfigurationProvider是否实现了provideDebugConfigurations或者resolveDebugConfiguration方法。
    Rule of thumb: If activation of a debug extensions is lightweight, use onDebug. If it is heavyweight, use onDebugInitialConfigurations and/or onDebugResolve depending on whether the DebugConfigurationProvider implements the corresponding methods provideDebugConfigurations and/or resolveDebugConfiguration.
activationEvents.workspaceContains
  • 每当打开文件夹,并且该文件夹至少匹配一个与glob pattern有关的文件。
"activationEvents": [
    "workspaceContains:**/.editorconfig"
]
activationEvents.onFileSystem
  • 读取到特定格式(specific scheme)的文件或者文件夹,就会激活该扩展,特定格式通常是指文件格式(file-scheme)。
  • 对于自定义文件系统,通常会提供更多格式,比如 ftpssh
"activationEvents": [
    "onFileSystem:sftp"
]
activationEvents.onView
  • 打开指定ID的视图,该扩展就会被激活。
"activationEvents": [
    "onView:nodeDependencies"
]
activationEvents.*
  • 只要vscode启动,该扩展就会被激活。
  • 为了更好地用户体验,仅当使用其他激活方式组合无法实现功能时使用该激活事件。
  • 扩展可以监听多个激活事件,这比使用*要好。

注:
- 这些扩展中,除了*都是特定事件激活,只有在满足特定条件时才触发。
- 扩展必须在主模块导出activate()函数,该函数仅会在被触发后执行一次。
- 扩展必须在主模块导出deactivate()函数,以便VS代码关闭时执行清理任务。

本节参考:Activation Events -package.json

4.扩展清单文件(Extension Manifest File)

所有的vscode 扩展,在其根目录下都会有一个清单文件package.json,字段(Fields)如下:

名称必须类型描述
nameYstring扩展的名称,全小写,没有空格
versionYstring]SemVer兼容版本
publisherYstring发布名称
enginesYobject扩展能够兼容的最小的VS Code代码版本,不能为*。例如^0.10.5表示扩展能够运行的最小的VS Code版本为0.10.5
licenseNstring许可
displayNameNstring市场中显示的扩展的名称
descriptionNstring简短描述您的扩展是什么和做了什么
categoriesNstring[]扩展所属的类别: [Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs]
keywordsNarray关键词,使扩展更容易被发现
galleryBannerNobject
previewNboolean
mainNstring扩展入口
contributesNobject扩展描述对象
activationEventsNarray激活事件数组
badgesNarray显示在市场侧栏的徽标,分别表示url、href、description
markdownNstring控制扩展市场上使用的markdown渲染引擎,要么是github(default)要么是standard
qnaNmarketplace (default), string, false控制市场上Q & A链接
dependenciesNobject运行时需要的NodeJS依赖。
devDependenciesNobject开发时需要的NodeJS依赖。
extensionDependenciesNarray此扩展所依赖的扩展的id集合。当该扩展被安装时,所依赖的扩展会一并被安装。扩展的id总是${publisher}.${name}
scriptsNobject与npm的脚本完全相同,但是带有额外的VS代码特定字段。
iconNstring至少128x128像素的图标路径(视网膜屏幕256 x256)

本节参考: extension-manifest

5. 扩展点(Contribution Points)

vscode提供以下扩展点:

configuration
commands
menus
keybindings
languages
debuggers
breakpoints
grammars
themes
snippets
jsonValidation
views
problemMatchers
problemPatterns

文档写的很详细,我就不详细写了,需要哪一部分自己看吧,以后有时间会继续完善这一部分。

本节参考:Contribution Points - package.json

其他比较好的文章

<think> 我们正在回答用户的问题:“VSCode需要下载哪些插件”。这个问题比较开放,因为VSCode插件选择很大程度上取决于用户的开发需求。但我们可以根据常见的开发场景推荐一些必备或流行的插件。 根据用户之前提供的引用内容,他们可能遇到了下载插件的问题,因此我们也可以适当提及离线安装插件的方法(尽管不是主要问题)。 我们将按照以下类别推荐插件: 1. 通用工具类(适用于所有开发者) 2. Web开发类 3. Python开发类(因为用户之前提到了Django) 4. Vue开发类(因为用户之前提到了Vue) 5. 其他常用类 注意:由于用户之前提到过离线安装插件的问题,我们在最后会简要说明如何离线安装插件(基于引用内容)。 开始回答: # VSCode必备插件推荐 VSCode的强大功能很大程度上依赖于插件生态系统。以下是针对不同开发需求的推荐插件列表: ## 一、通用工具类(所有开发者必备) | 插件名称 | 功能描述 | 安装量(万) | 备注 | |----------|----------|------------|------| | **Chinese (Simplified) Language Pack** | 中文语言包 | 1000+ | 适合中文用户[^3] | | **GitLens** | 增强Git功能 | 2000+ | 查看代码作者、历史等 | | **Prettier - Code formatter** | 代码格式化 | 2000+ | 支持多种语言,统一代码风格 | | **ESLint** | JavaScript代码检查 | 2000+ | 实时检测代码问题 | | **Path Intellisense** | 路径自动补全 | 1000+ | 快速输入文件路径 | | **Bracket Pair Colorizer** | 彩色括号匹配 | 1000+ | 区分嵌套括号 | | **Project Manager** | 项目管理 | 300+ | 快速切换项目 | | **Live Share** | 实时协作 | 300+ | 微软官方协作工具 | > 安装量数据来自VSCode Marketplace(截至2023年) ## 二、Web开发类 | 插件名称 | 主要功能 | |----------|----------| | **Auto Close Tag** | 自动闭合HTML标签 | | **Auto Rename Tag** | 自动重命名配对的HTML标签 | | **CSS Peek** | 快速查看CSS定义 | | **JavaScript (ES6) code snippets** | ES6语法代码片段 | | **jQuery Code Snippets** | jQuery代码片段 | | **HTML CSS Support** | HTML中CSS智能提示 | ## 三、Python开发类(适合Django开发者) | 插件名称 | 功能 | |----------|------| | **Python** | Python语言支持(微软官方) | | **Pylance** | Python语言服务器(增强智能提示) | | **Django** | Django模板语言支持 | | **Jupyter** | Jupyter笔记本支持 | ## 四、Vue开发类 | 插件名称 | 功能 | |----------|------| | **Volar** | Vue 3语言支持(推荐) | | **Vue VSCode Snippets** | Vue代码片段 | | **Vue Theme** | Vue主题 | | **Vue Peek** | 快速跳转到Vue组件定义 | ## 五、其他实用插件 | 类别 | 插件 | |------|------| | **数据库** | SQLTools, MySQL | | **Docker** | Docker | | **Markdown** | Markdown All in One | | **主题美化** | One Dark Pro, Material Icon Theme | ## 离线安装插件方法 若在线安装失败(如出现`XHR failed`错误),可参考以下离线安装步骤: 1. **下载插件vsix文件**: - 方法1:通过VSCode Marketplace官网搜索插件,进入详情页后点击右侧“Download Extension”下载[^3] - 方法2:直接拼接下载链接:`https://marketplace.visualstudio.com/_apis/public/gallery/publishers/{publisher}/vsextensions/{extension}/{version}/vspackage`[^4] - 示例:Python插件下载链接(版本3.10.1): ``` https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2022.18.1/vspackage ``` 2. **安装vsix文件**: ```bash # 打开终端,进入vsix文件所在目录 code --install-extension <filename>.vsix ``` 或通过VSCode界面:`扩展` → `...` → `从VSIX安装`[^3] > 注意:离线安装需确保VSCode版本与插件兼容。若安装失败,可尝试更新系统或VSCode版本[^2] ## 六、插件管理技巧 1. **同步配置**:使用VSCode设置同步功能(需登录Microsoft账号) 2. **禁用非必要插件**:大型项目中禁用部分插件可提升性能 3. **按工作区启用插件**:右键插件 → `启用(工作区)` §§相关问题§§ 1. 如何解决VSCode插件安装失败问题? 2. VSCode有哪些提高开发效率的技巧? 3. 如何为特定语言配置VSCode开发环境? 4. VSCode插件开发入门指南? </think>以下是针对不同开发需求的 VSCode 必备插件推荐(分类整理),包含安装说明和功能详解: --- ### 一、通用开发必备插件 | **插件名称** | **核心功能** | **安装命令/方式** | |--------------|--------------|------------------| | **Chinese (Simplified)** | 中文界面 | `ext install MS-CEINTL.vscode-language-pack-zh-hans` | | **GitLens** | Git增强(代码作者追溯/历史查看) | `ext install eamodio.gitlens` | | **Prettier** | 代码自动格式化 | `ext install esbenp.prettier-vscode` | | **ESLint** | JavaScript/TS 代码质量检查 | `ext install dbaeumer.vscode-eslint` | > 💡 开发效率提升组合:GitLens + Prettier + ESLint,覆盖 90% 的代码管理需求[^3] --- ### 二、前端开发专用插件 | **插件名称** | **支持框架** | **关键特性** | |--------------|--------------|--------------| | **Volar** | Vue 3 | 模板语法高亮 + 组件跳转 | | **React Snippets** | React | 代码片段自动生成 | | **Tailwind CSS IntelliSense** | Tailwind | CSS 类名智能提示 | | **Live Server** | 通用 | 实时页面重载 | ```mermaid graph LR A[Vue组件] --> B(Volar语法检查) B --> C[自动修复] C --> D[Live Server热更新] D --> E[浏览器实时预览] ``` --- ### 三、Python/Django 开发插件 | **插件名称** | **功能亮点** | **安装说明** | |--------------|--------------|--------------| | **Python** | 官方支持(调试/智能提示) | `ext install ms-python.python` | | **Django** | 模板语法支持 | `ext install batisteo.vscode-django` | | **Pylance** | 类型检查 + 代码补全 | 需 Python 扩展包内安装 | | **Jupyter** | 交互式笔记本 | `ext install ms-toolsai.jupyter` | > ⚠️ 注意:Django 项目需在 settings.py 中配置 `"python.languageServer": "Pylance"` 获得最佳支持[^3] --- ### 四、数据库工具 | **插件名称** | **数据库支持** | **特色功能** | |--------------|----------------|--------------| | **SQLTools** | MySQL/PostgreSQL | 可视化查询界面 | | **MongoDB** | MongoDB | 文档树形浏览 | | **Redis** | Redis | 键值可视化管理 | --- ### 五、高效开发增强套件 ```javascript // settings.json 推荐配置 { "editor.formatOnSave": true, // 保存自动格式化 "emmet.triggerExpansionOnTab": true, // Tab键触发Emmet "git.autofetch": true, // 自动获取Git更新 "terminal.integrated.shell.windows": "Git Bash" // 集成终端 } ``` --- ### 六、离线安装指南 当遇到网络问题(如 `XHR failed` 错误)时: 1. 官网下载 vsix 文件:[VSCode Marketplace](https://marketplace.visualstudio.com)[^3] 2. 命令行安装: ```bash code --install-extension 插件.vsix ``` 3. 手动放置插件: ```tree VSCode安装目录 └── resources └── app └── extensions # 放入解压后的插件文件夹 ``` > 💡 引用[2]中用户通过更新系统解决安装问题,可优先尝试此方案 --- ### 七、进阶推荐插件 - **Docker**:容器管理 - **Remote - SSH**:远程开发 - **Material Icon Theme**:图标美化 - **Error Lens**:行内错误提示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值