0


基于VS Code的插件开发(基础篇)

一、基础介绍

VSCode 采用了 Electron,在语言上,VSCode 使用了自家的 TypeScript 语言开发。Electron是基于 Chromium 和 Node.js,使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用,它兼容 Mac、Windows 和 Linux,可以构建出三个平台的应用程序。
从实现上来看,Electron = Node.js + Chromium + Native API
接下来看下VS Code布局
在这里插入图片描述
在这里插入图片描述

二、插件开发

IDE介绍

Visual Studio Code(简称 VSCode)凭借其占用内存小、文件加载快、稳定性好、插件丰富等等特点,从众多 IDE 中脱颖而出,受到了广大开发人员的青睐。
VSCode 提供以下扩展能力:代码自动补全、自定义命令/菜单/快捷键、悬浮提示、自定义跳转、主题定制、自定义 WebView 等等。
接下来主要介绍如何在VS Code中开发一个插件。
官方文档地址:https://code.visualstudio.com/api/references/vscode-api
在这里插入图片描述

2、开发环境准备

  • 安装最新版本的 VSCode
  • Nodejs,建议使用 LTS 版本
  • 官方推荐使用的脚手架工具 Yeoman 和 Generator-code
  • 插件打包和发布工具 vsce

3、安装工具

全局安装 Generator-code

jianshuangpeng@ZBMac-C02F2R9QM  npm install -g yo generator-code
npm WARN deprecated @npmcli/[email protected]: This functionality has been moved to @npmcli/fs
npm WARN deprecated [email protected]: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/[email protected]: This functionality has been moved to @npmcli/fs

added 128 packages, removed 450 packages, and changed 730 packages in 47

全局安装 vsce

jianshuangpeng@ZBMac-C02F2R9QM  ~  npm install -g vsce
changed 106 packages in 7s

4、脚手架使用

选择一个文件目录下执行命令:

yo code

选择 New Extension 类型,然后依次填写插件名称、描述、包管理工具等基础信息。

jianshuangpeng@ZBMac-C02F2R9QM  ~/Documents/project  yo code

     _-----_     ╭──────────────────────────╮
    |       |    │   Welcome to the Visual  │
    |--(o)--|    │   Studio Code Extension  │
   `---------´   │        generator!        │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

? What type of extension do you want to create? New Extension (TypeScript)
? What's the name of your extension? vscode-plugin-todo
? What's the identifier of your extension? vscode-plugin-todo
? What's the description of your extension? 测试插件
? Initialize a git repository? Yes
? Bundle the source code with webpack? Yes
? Which package manager to use? n

安装各种依赖后生成一个文件,目录如下, 更详细文档请查看

jianshuangpeng@ZBMac-C02F2R9QM tree -L 2 -a
.
├── .vscode
│   ├── extensions.json
│   ├── launch.json //插件加载和调试的配置
│   ├── settings.json
│   └── tasks.json // // 配置TypeScript编译任务
├── .vscodeignore
├── CHANGELOG.md //变更记录
├── README.md
├── node_modules
├── package-lock.json
├── package.json // TypeScript配置
├── src
│   ├── extension.ts // 插件源代码
│   └── test
├── tsconfig.json // ts配置文件
├── vsc-extension-quickstart.md
└── webpack.config.js

针对生成文件目录重点说明,其中最重要的文件是package.json和extension.js,了解这两个文件基本上就可以入门开发一个vscode插件了。

1、package.json
该文件是vscode扩展的清单文件,里面有很多字段,官方对每个字段都进行了详细阐述,本次我们重点阐述以下初始化后期清单文件

// package.json
{
  "name": "vscode-plugin-todo", // 一个插件的ID
  "displayName": "vscode-plugin-todo",
  "description": "测试插件",
  "version": "0.0.1",
  "engines": { // 描述了这个插件依赖的最低VS Code API版本
    "vscode": "^1.73.0"
  },
  "categories": [
    "Other"
  ],
  "activationEvents": [ // 激活事件
    "onCommand:vscode-plugin-todo.helloWorld"
  ],
  "main": "./dist/extension.js", // 插件的主入口
  "contributes": { // 发布内容配置
    "commands": [
      {
        "command": "vscode-plugin-todo.helloWorld",
        "title": "Hello World"
      }
    ]
  },
  "scripts": {
    "vscode:prepublish": "npm run package",
    "compile": "webpack",
    "watch": "webpack --watch",
    "package": "webpack --mode production --devtool hidden-source-map",
    "compile-tests": "tsc -p . --outDir out",
    "watch-tests": "tsc -p . -w --outDir out",
    "pretest": "npm run compile-tests && npm run compile && npm run lint",
    "lint": "eslint src --ext ts",
    "test": "node ./out/test/runTest.js"
  },
  "devDependencies": {
    "@types/vscode": "^1.73.0",
    "@types/glob": "^8.0.0",
    "@types/mocha": "^10.0.0",
    "@types/node": "16.x",
    "@typescript-eslint/eslint-plugin": "^5.42.0",
    "@typescript-eslint/parser": "^5.42.0",
    "eslint": "^8.26.0",
    "glob": "^8.0.3",
    "mocha": "^10.1.0",
    "typescript": "^4.8.4",
    "ts-loader": "^9.4.1",
    "webpack": "^5.74.0",
    "webpack-cli": "^4.10.0",
    "@vscode/test-electron": "^2.2.0"
  }
}

重点关注的主要有三部分内容:activationEvents、main以及contributes

main:指明了该插件的主入口在哪,只有找到主入口整个项目才能正常的运转

activationEvents:指明该插件在何种情况下才会被激活,因为只有激活后插件才能被正常使用,官网已经指明了激活的时机,这样我们就可以按需设置对应时机。(具体每个时机用的时候详细查看即可)。

  • onLanguage 打开解析为特定语言文件时被激活,例如"onLanguage:python"
  • onCommand 在调用命令时被激活
  • workspaceContains 每当打开文件夹并且该文件夹包含至少一个与 glob 模式匹配的文件时
  • onView 每当在 VS Code 侧栏中展开指定 id 的视图
  • onUri 每当打开该扩展的系统范围的 Uri 时
  • onWebviewPanel
  • onCustomEditor

contributes:通过扩展注册contributes用来扩展Visual Studio Code中的各项技能,其有多个配置,如下所示:

  • commands 命令
  • configuration 配置
  • configurationDefaults 默认的特定于语言的编辑器配置
  • keybindings 快捷键绑定

2、extension.ts
该文件时其入口文件,即package.json中main字段对应的文件(不一定叫extension.js这个名字),该文件中将导出两个方法:activate和deactivate,两个方法的执行时机如下所示:

  • activate 这是插件被激活时执行的函数
  • deactivate 这是插件被销毁时调用的方法,比如释放内存等。

5、运行插件

默认已经很顺利的完成上面所有的操作,接下来我们尝试启动刚才的插件,使用vscode打开文件目录后,按F5刷新
在这里插入图片描述
在新打开的页面中,按command+Shit+P进入「Command Palette」,输入「Hello World」执行这个项目
在这里插入图片描述

6、发布插件

发布插件的方式基本有三种:
1、直接共享源文件;
2、发布到插件市场;
3、打包成vsix插件安装。这里只介绍下第三种方式。
前面我们已经全局安装了vsce。现在只需要在插件根目录下执行:vsce package即可生成插件

jianshuangpeng@ZBMac-C02F2R9QM  vsce package
Executing prepublish script 'npm run vscode:prepublish'...

> [email protected] package
> webpack --mode production --devtool hidden-source-map

    [webpack-cli] Compiler starting...
    [webpack-cli] Compiler finished
Do you want to continue? [y/N] y
 DONE  Packaged: /Users/jianshuangpeng/Documents/project/vscode-plugin-todo/vscode-plugin-todo-0.0.1.vsix (6 files, 3.

7、安装插件

插件安装完成后左侧菜单中会自动添加插件
在这里插入图片描述

标签: vscode javascript ide

本文转载自: https://blog.csdn.net/qq_30632003/article/details/129260402
版权归原作者 一个被程序员耽误的厨师 所有, 如有侵权,请联系我们删除。

“基于VS Code的插件开发(基础篇)”的评论:

还没有评论