vscode插件開發(fā)實踐與demo源碼
寫在前面
工欲善其事必先利其器摆寄。vscode作為優(yōu)秀的開發(fā)工具,給我的日常開發(fā)工作提供了極大的便利夫植。其拓展機(jī)制更是如此茎芋。
但是颅眶,最近在做年度專業(yè)線任務(wù)時,有需要用到漂亮的行尾注釋對齊田弥,搜索后發(fā)現(xiàn)vscode官方插件市場沒有我想要的涛酗。
于是便想著自己來開發(fā)這么個東西,一方面方便后邊自己使用偷厦,一方面也能學(xué)習(xí)下vscode的插件開發(fā)商叹、發(fā)布方法,另一方面要是發(fā)布后對其他人有所幫助就更好了只泼。
本文主要內(nèi)容
這篇文章是在我完成插件開發(fā)剖笙、發(fā)布后寫的,記錄下方法请唱。
主要包含兩個方面的內(nèi)容:
- vscode插件開發(fā)枯途、發(fā)布主要流程
- vscode插件demo源碼:
(1)參考一,注釋對齊插件 https://github.com/febaoshan/vscode-extension-comment-aligner
(2)參考二籍滴,console.log快速輸出日志插件 https://github.com/febaoshan/vscode-extension-console-logger
(3)參考三酪夷,git commit提交描述快速填入插件 https://marketplace.visualstudio.com/items?itemName=huangbaoshan.easy-commit-lint&ssr=false#overview
vscode插件開發(fā)、發(fā)布主要流程
- 插件開發(fā)前的準(zhǔn)備:vscode孽惰、nodejs晚岭、vscode插件生產(chǎn)工具、git勋功、微軟賬號
- 插件開發(fā):插件構(gòu)思坦报、官方文檔查閱
- 插件發(fā)布:打包、上傳狂鞋、插件市場操作
- 插件維護(hù):更新迭代后打包片择、上傳、插件市場操作
插件開發(fā)前的準(zhǔn)備:
vscode骚揍、nodejs字管、git啰挪、微軟賬號,這個的準(zhǔn)備無需多說嘲叔。
vscode插件生產(chǎn)工具:官方推薦使用Yeoman 和 VS Code Extension Generator亡呵。用如下命令安裝:
npm install -g yo generator-code
至此開發(fā)所需的準(zhǔn)備已做好。
插件開發(fā)
使用生產(chǎn)工具初始化代碼
執(zhí)行如下指令
yo code
結(jié)果如下:
_-----_ ╭──────────────────────────╮
| | │ Welcome to the Visual │
|--(o)--| │ Studio Code Extension │
`---------′ │ generator! │
( _′U`_ ) ╰──────────────────────────╯
/___A___\ /
| ~ |
__'.___.'__
′ ` |° ′ Y `
? What type of extension do you want to create? (Use arrow keys)
> New Extension (TypeScript)
New Extension (JavaScript)
New Color Theme
New Language Support
New Code Snippets
New Keymap
New Extension Pack
(Move up and down to reveal more choices)
在os系統(tǒng)上通過上下鍵來選擇要創(chuàng)建的類型硫戈,在win上輸入1锰什、2大莫、3后按回車來選擇志电。
其余步驟根據(jù)提示即可戏蔑。得到如下結(jié)構(gòu)目錄結(jié)構(gòu):
├── .vscode // 資源配置文件
├── CHANGELOG.md // 更改記錄文件误辑,會展示到vscode插件市場
├── extension.js // 拓展源代碼文件
├── jsconfig.json
├── package.json // 資源配置文件
├── README.md // 插件介紹文件,會展示到vscode插件市場
├── test // 測試文件
└── vsc-extension-quickstart.md
ps:其余項目類型的文檔目錄可能會有所差別季春,以生成的文件目錄為準(zhǔn)溉痢。在js拓展項目下费奸,最重要的就是extension.js
和package.json
辛掠。
插件構(gòu)思
靈感來源于生活谢谦、工作释牺,這個想到了就可以去做萝衩。比如我這個行尾注釋對齊(上面的目錄注釋就是用的我剛開發(fā)好的插件)。
關(guān)于comment-aligner的具體思路就不寫在這里了没咙,感興趣的可以去下載源碼看看猩谊,里邊包含了完整的注釋。邏輯十分簡單祭刚。
查閱文檔開發(fā)
這里不得不說一下官方文檔不太好看牌捷,至少不是那么友好。傳送門https://code.visualstudio.com/api/references/vscode-api涡驮。英文實在吃力的可以使用chrome的一鍵翻譯暗甥,翻譯的還算準(zhǔn)確的。
對于基本的應(yīng)用主要查看window
相關(guān)的就足夠了捉捅,結(jié)合yo code
生成的基本代碼可以實現(xiàn)簡單的功能撤防。
插件發(fā)布
安裝打包、發(fā)布工具
npm install -g vsce
創(chuàng)建發(fā)布人
在插件市場官網(wǎng)創(chuàng)建發(fā)布人
完善package.json
package.json
中有vscode的自定義配置棒口,在執(zhí)行打包命令時vscode會自檢寄月,如果配置錯誤或者遺漏會有提示信息。
較完整的信息如下(下方是我發(fā)布的comment aligner的package.json文件):
{
"name": "comment-aligner",
"displayName": "comment aligner",
"description": "A tool for aligning the inline trailing comment",
"version": "1.0.1",
"publisher": "huangbaoshan", // 發(fā)布人无牵,在插件市場官網(wǎng)創(chuàng)建的發(fā)布人id
"icon": "icon/icon.png", // 插件圖標(biāo)漾肮,用于在插件市場展示的icon;可以放到同級目錄內(nèi)茎毁,打包會帶入
"repository": {
"type": "git",
"url":"https://github.com/gitshan/vscode-extension-comment-aligner.git"
},
"engines": {
"vscode": "^1.30.0" // vscode版本號
},
"categories": [
"Other" // vscode插件類別克懊,會在插件市場的對應(yīng)類別中展示
],
"activationEvents": [
"onCommand:extension.commentaligner"
],
"main": "./extension.js",
"contributes": {
"commands": [{
"command": "extension.commentaligner", // 插件注冊的類名
"title": "Comment Aligner" // 插件在命令面包的展示名稱
}]
},
"scripts": {
"postinstall": "node ./node_modules/vscode/bin/install",
"test": "node ./node_modules/vscode/bin/test"
},
"devDependencies": {
"typescript": "^3.1.4",
"vscode": "^1.1.25",
"eslint": "^4.11.0",
"@types/node": "^8.10.25",
"@types/mocha": "^2.2.42"
}
}
在開發(fā)console插件的時候,發(fā)現(xiàn)上述package.jons很不完善,因此附一個稍微全點的介紹保檐,轉(zhuǎn)發(fā)自https://www.cnblogs.com/liuxianan/p/vscode-plugin-package-json.html:
{
// 插件的名字耕蝉,應(yīng)全部小寫,不能有空格
"name": "vscode-plugin-demo",
// 插件的友好顯示名稱夜只,用于顯示在應(yīng)用市場垒在,支持中文
"displayName": "VSCode插件demo",
// 描述
"description": "VSCode插件demo集錦",
// 關(guān)鍵字,用于應(yīng)用市場搜索
"keywords": ["vscode", "plugin", "demo"],
// 版本號
"version": "1.0.0",
// 發(fā)布者扔亥,如果要發(fā)布到應(yīng)用市場的話场躯,這個名字必須與發(fā)布者一致
"publisher": "sxei",
// 表示插件最低支持的vscode版本
"engines": {
"vscode": "^1.27.0"
},
// 插件應(yīng)用市場分類,可選值: [Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs]
"categories": [
"Other"
],
// 插件圖標(biāo)旅挤,至少128x128像素
"icon": "images/icon.png",
// 擴(kuò)展的激活事件數(shù)組踢关,可以被哪些事件激活擴(kuò)展,后文有詳細(xì)介紹
"activationEvents": [
"onCommand:extension.sayHello"
],
// 插件的主入口
"main": "./src/extension",
// 貢獻(xiàn)點粘茄,整個插件最重要最多的配置項
"contributes": {
// 插件配置項
"configuration": {
"type": "object",
// 配置項標(biāo)題签舞,會顯示在vscode的設(shè)置頁
"title": "vscode-plugin-demo",
"properties": {
// 這里我隨便寫了2個設(shè)置,配置你的昵稱
"vscodePluginDemo.yourName": {
"type": "string",
"default": "guest",
"description": "你的名字"
},
// 是否在啟動時顯示提示
"vscodePluginDemo.showTip": {
"type": "boolean",
"default": true,
"description": "是否在每次啟動時顯示歡迎提示柒瓣!"
}
}
},
// 命令
"commands": [
{
"command": "extension.sayHello",
"title": "Hello World"
}
],
// 快捷鍵綁定
"keybindings": [
{
"command": "extension.sayHello",
"key": "ctrl+f10",
"mac": "cmd+f10",
"when": "editorTextFocus"
}
],
// 菜單
"menus": {
// 編輯器右鍵菜單
"editor/context": [
{
// 表示只有編輯器具有焦點時才會在菜單中出現(xiàn)
"when": "editorFocus",
"command": "extension.sayHello",
// navigation是一個永遠(yuǎn)置頂?shù)姆纸M儒搭,后面的@6是人工進(jìn)行組內(nèi)排序
"group": "navigation@6"
},
{
"when": "editorFocus",
"command": "extension.demo.getCurrentFilePath",
"group": "navigation@5"
},
{
// 只有編輯器具有焦點,并且打開的是JS文件才會出現(xiàn)
"when": "editorFocus && resourceLangId == javascript",
"command": "extension.demo.testMenuShow",
"group": "z_commands"
},
{
"command": "extension.demo.openWebview",
"group": "navigation"
}
],
// 編輯器右上角圖標(biāo)芙贫,不配置圖片就顯示文字
"editor/title": [
{
"when": "editorFocus && resourceLangId == javascript",
"command": "extension.demo.testMenuShow",
"group": "navigation"
}
],
// 編輯器標(biāo)題右鍵菜單
"editor/title/context": [
{
"when": "resourceLangId == javascript",
"command": "extension.demo.testMenuShow",
"group": "navigation"
}
],
// 資源管理器右鍵菜單
"explorer/context": [
{
"command": "extension.demo.getCurrentFilePath",
"group": "navigation"
},
{
"command": "extension.demo.openWebview",
"group": "navigation"
}
]
},
// 代碼片段
"snippets": [
{
"language": "javascript",
"path": "./snippets/javascript.json"
},
{
"language": "html",
"path": "./snippets/html.json"
}
],
// 自定義新的activitybar圖標(biāo)搂鲫,也就是左側(cè)側(cè)邊欄大的圖標(biāo)
"viewsContainers": {
"activitybar": [
{
"id": "beautifulGirl",
"title": "美女",
"icon": "images/beautifulGirl.svg"
}
]
},
// 自定義側(cè)邊欄內(nèi)view的實現(xiàn)
"views": {
// 和 viewsContainers 的id對應(yīng)
"beautifulGirl": [
{
"id": "beautifulGirl1",
"name": "國內(nèi)美女"
},
{
"id": "beautifulGirl2",
"name": "國外美女"
},
{
"id": "beautifulGirl3",
"name": "人妖"
}
]
},
// 圖標(biāo)主題
"iconThemes": [
{
"id": "testIconTheme",
"label": "測試圖標(biāo)主題",
"path": "./theme/icon-theme.json"
}
]
},
// 同 npm scripts
"scripts": {
"postinstall": "node ./node_modules/vscode/bin/install",
"test": "node ./node_modules/vscode/bin/test"
},
// 開發(fā)依賴
"devDependencies": {
"typescript": "^2.6.1",
"vscode": "^1.1.6",
"eslint": "^4.11.0",
"@types/node": "^7.0.43",
"@types/mocha": "^2.2.42"
},
// 后面這幾個應(yīng)該不用介紹了
"license": "SEE LICENSE IN LICENSE.txt",
"bugs": {
"url": "https://github.com/sxei/vscode-plugin-demo/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/sxei/vscode-plugin-demo"
},
// 主頁
"homepage": "https://github.com/sxei/vscode-plugin-demo/blob/master/README.md"
}
打包
執(zhí)行如下命令:
vsce package
在根目錄得到:comment-aligner-1.0.1.vsix
文件
發(fā)布
方法一:用vsce的
vsce publish
工具來發(fā)布,但是需要在官網(wǎng)配置Personal Access Token
較為繁瑣磺平』耆裕可參考官方教程-
方法二:在官網(wǎng)直接上傳發(fā)布
vscode插件發(fā)布1.png
vscode插件發(fā)布2.png
vscode插件發(fā)布3.png上傳后點擊確定即可發(fā)布成功。
發(fā)布檢查
-
在插件市場官網(wǎng)看狀態(tài)
vscode插件發(fā)布4.png -
在插件市場官網(wǎng)搜索
vscode插件發(fā)布5.png -
在vscode插件頁搜索
vscode插件發(fā)布6.png
以上均表示已發(fā)布成功拣挪。
插件維護(hù)
在發(fā)現(xiàn)bug和新功能開發(fā)完成后擦酌,需要更新插件,只需要將新生產(chǎn)的.vsix包上傳到官網(wǎng)即可菠劝。
最后
希望有用赊舶,謝謝大家。