VSCODE插件初體驗

前言

使用vscode也有大半年時間了,從一開始的各種問題到現在漸漸好用。插件維護比sublime好,速度能秒atom,這大概就是現在離不開vscode的原因吧。雖然它還有不少問題,比如代碼高亮和智能提示,尤其是在vue這種template文件中,完全沒有用!

不過今天不是來吐槽這個的。雖然說到vscode的插件比sublime維護方便,但是插件數量還是比不上的,畢竟時間還不長。比如我一直很喜歡的作者信息生成的插件,什麼名字忘記了,畢竟卸載好久了…主要就是設置了作者姓名,郵箱這些信息之後,在頂部自動生成包括作者/郵箱/時間還有其他自定義的信息。

在vscode插件市場找了半天也沒找到,決定自己動手擼一個。

  • 項目地址:excaliburhan/vscode-author-generator。
  • 插件安裝:vscode或者市場搜索vscode-author-generator。

需求準備

首先,確定下這個插件的需求:

  • 自動生成作者信息,部分信息(作者/郵箱)可配置。
  • 根據文件類型生成不同注釋。
  • 支持自定義模版。

其他準備

  • vscode api文檔
  • vscecli 文檔

這兩個文檔在之後的開發會用到,下面會講到。

開發插件

1. vscecli信息

由於後面生成項目要用到發布者信息,我就把vscecli的生成發布者信息部分先講了,當然後面發布還要用到它。下面是生成發布者信息的步驟,最好還是按照vscecli的文檔來做。

  • 安裝:npm install -g vsce
  • 創建:vsce create-publisher (publisher name) (publisher name就是發布者的名字,是你在visualstudio註冊的名字,此外你還需要Personal Access Token)
  • 登陸:vsce login (publisher name) (這一步會要求你輸入發布者名字和Personal Access Token)

至此,本地會記住你的信息,如果你需要更換用戶,也可以使用vsce logout登出,並換賬號登陸。

2. 生成項目

這裡我使用了官方的generator,生成必要的package.json信息,如果你自己去寫,可以參看官網文檔。

  • npm install -g yo generator-code && yo code

可以看到,提供了幾種基本插件/主題編寫的模版,由於我沒學過typescript,這裡選擇了javascript的插件。

按部就班填寫信息,如果你已經在上一步登陸vsce,這裡的publisher name是自動填寫的,你也可以手動填寫,但保持和你的註冊用戶名一致。

確認後,會自動使用npm安裝依賴,耐心等待一會,項目就生成完畢。

我這裡沒有讓它自動生成git項目,可以通過git remote add添加你自己的github倉庫地址。

生成的項目結構大概是這樣的,由於功能比較簡單,這裡只要關心extension.js就可以了,這是我們的主要功能js。

3. manifest解釋

vscode的manifest文件,也就是package.json文件,先來看看默認生成的:

{n "name": "vscode-test", // 插件名字n "displayName": "vscode-test", // 插件顯示名字n "description": "test",n "version": "0.0.1", // 插件版本n "publisher": "edwardhjp", // 發布者n "engines": {n "vscode": "^1.5.0"n },n "categories": [n "Other"n ],n "activationEvents": [n "onCommand:extension.sayHello" // 激活事件,onCommand表示command調用,就是在vscode用`cmd + shift + p`調出來後使用,其他的參看文檔。n ],n "main": "./extension", // 入口文件n "contributes": {n "commands": [{n "command": "extension.sayHello", // `cmd + shift + p`實際執行的command,和上面的激活事件要對應n "title": "Hello World" // `cmd + shift + p`調用顯示名字n }]n },n "scripts": {n "postinstall": "node ./node_modules/vscode/bin/install",n "test": "node ./node_modules/vscode/bin/test"n },n "devDependencies": {n "typescript": "^2.0.3",n "vscode": "^1.0.0",n "mocha": "^2.3.3",n "eslint": "^3.6.0",n "@types/node": "^6.0.40",n "@types/mocha": "^2.2.32"n }n}n

基本解釋都寫在注釋里了,根據自己需要修改吧。

4. extension.js編寫

var vscode = require(vscode); // 包含vscode所有api的模塊nnfunction activate(context) {n // 插件激活事件,必須與package.json的對應n var disposable = vscode.commands.registerCommand(extension.sayHello, function () {n // Info信息框n vscode.window.showInformationMessage(Hello World!);n });nn context.subscriptions.push(disposable);n}nexports.activate = activate;nn// 取消插件激活事件nfunction deactivate() {n}nexports.deactivate = deactivate;n

官方的js文件,就是在調用的時候彈一個Hello World!的提示框。原則上你的邏輯都應該在registerCommand的function裡面。如果你的邏輯很複雜,建議把邏輯移到外面,合理解構代碼。

你可以在vscode打開項目的目錄文件,然後使用F5進行debug模式,vscode會起一個擴展主機給你進行開發。

但是我的vscode不知道什麼原因,擴展主機一直失敗。我都是直接把項目拷貝到本地插件目錄進行開發的,每次debug都要重啟vscode,說多了都是淚~

如果你知道怎麼解決,請告訴我!

5. 插件發布

又要用到剛才的vscecli了。

在項目根目錄使用:vsce package打包你的插件,會生成一個extensionName-version.vsix的信息文件。

然後:vsce publish,進行發布,如果成功,會返回類似內容:

Successfully published publisherName.extensionName@version!n

尾聲

好了,現在你可以在vscode市場搜索你自己上傳的插件了。祝大家寫得愉快!


推薦閱讀:

同為Electron應用,為什麼VSCode無法像Github桌面客戶端一樣實現菜單欄和標題欄的變色?
visual studio code 可以配置c++ 一鍵編譯運行嗎?
vcxsrv轉發vbox的vs code莫名卡頓,誰的鍋,怎麼解決?
如何評價 Visual Studio Code?
為什麼visual studio code 沒有uwp版本?

TAG:VisualStudioCode | 插件 |