你可以看到这个工具支持创建多种类型的项目,我们今天先从插件(Extension)入手,所以第一个和第二个的区别就是,你要是会用 TypeScript 就选第一个,也是官方推荐的一个;要是不想写各种麻烦的类型定义和类型校验,就选第二个 JavaScript。
这一次我们选 JavaScript 来做一个简单的入门, 随后你会需要填写一系列初始化的信息如下:
注释如下:
What type of extension do you want to create?(创建哪一种类型的扩展?)
What's the name of your extension?(扩展的名称?应该全部为小写字母,没有空格)
What's the identifier of your extension?(扩展的标示?)
What's the description of your extension?(扩展的描述是什么?)
Initialize a git repository?(是否初始化 git 仓库?)
Which package manager to use? (因为我们装的是 npm,所以选 npm 就行了,如果你有 yarn,你也可以选 yarn)
使用哪一种包管理器(来下载各种 npm 包)
四、搞一个简单的 VS Code 插件前面的准备的差不多啦!那我们就要开始开「绿皮小火车」啦。
进入刚创建的文件目录 cd test-extension,文件目录:
或许你觉得文件目录嘛,一看就知道了,不就是几个配置信息或者项目说明嘛,但是这里面的配置信息「非常重要」x3,重要到你可能少一个配置或者配置的不对,功能就出不来。所以我们还是稍微花点笔墨聊聊这里的信息。
首先你可以在 package.json 文件里面,看到自己在前一个步骤里面设置的各个值,配置内的各个主要的含义如下,这里有个小点注意一下,如果你的 VS Code 比较旧,且更新不了最新的,你就把下面的 engines 设置的版本低一点,比如我就改成了 ^1.52.0 确保一定能兼容目前的 VS Code 编辑器就可以 :
{ "name": "test-extension", // 插件的名字 "displayName": "test-extension", // 在插件市场展示的名字 "description": "vscode extension sample", // 插件描述 "version": "0.0.1", // 插件版本 "engines": { // 最低支持 vscode 的版本 "vscode": "^1.52.0" }, "categories": [ // 插件的类别,用于在插件市场做区分 "Other" ], "activationEvents": [ // 插件激活的事件列表,可以有多个触发机制,所以是数组形式 "onCommand:test-extension.helloWorld" ], "main": "./extension.js", // 插件主入口 "contributes": { // 贡献点,用于拓展插件功能的配置项,这里不会细讲,先用 command 举例 "commands": [ { "command": "test-extension.helloWorld", "title": "Hello World" } ] }, "scripts": { "lint": "eslint .", "pretest": "npm run lint", "test": "node ./test/runTest.js" }, "devDependencies": { "@types/vscode": "^1.55.0", "@types/glob": "^7.1.3", "@types/mocha": "^8.0.4", "@types/node": "^12.11.7", "eslint": "^7.19.0", "glob": "^7.1.6", "mocha": "^8.2.1", "typescript": "^4.1.3", "vscode-test": "^1.5.0" } }熟悉了配置之后,我们再来看一下插件的入口文件 extsnsion.js ,里面主要有两个主要的函数,一个是 activate 表示激活插件时的处理,一般是注册命令等一些初始化的操作;另一个是 deactivate ,表示插件失活的时候做的处理,其实听名字你也应该有体感,这就是插件的生命周期里的两个钩子函数嘛。
// 引了 vscode 这个模块,这样你就可以用它里面的很多很多功能啦 const vscode = require('vscode'); /** * @param {vscode.ExtensionContext} context */ function activate(context) { console.log('Congratulations, your extension "test-extension" is now active!'); let disposable = vscode.commands.registerCommand('test-extension.helloWorld', function () { vscode.window.showInformationMessage('Hello World from test-extension!'); }); context.subscriptions.push(disposable); } function deactivate() {} module.exports = { activate, deactivate }我们来分析一下上面这段代码,你可以看到里面 registerComman 了一个命令,是不是有种似曾相识的感觉?没错,就是上面在 package.json 里面有提到的那个 command,让我们摘出来一起看看:
..., // package.json "contributes": { // 贡献点,用于拓展插件功能的配置项,这里不会细讲,先用 command 举例 "commands": [ { "command": "test-extension.helloWorld", "title": "Hello World" } ] }, ... ... // extension.js function activate(context) { console.log('Congratulations, your extension "test-extension" is now active!'); let disposable = vscode.commands.registerCommand('test-extension.helloWorld', function () { vscode.window.showInformationMessage('Hello World from test-extension!'); }); context.subscriptions.push(disposable); } ...