vscode插件開發(fā)實踐與demo源碼

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)容:

  1. vscode插件開發(fā)枯途、發(fā)布主要流程
  2. 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ā)布主要流程

  1. 插件開發(fā)前的準(zhǔn)備:vscode孽惰、nodejs晚岭、vscode插件生產(chǎn)工具、git勋功、微軟賬號
  2. 插件開發(fā):插件構(gòu)思坦报、官方文檔查閱
  3. 插件發(fā)布:打包、上傳狂鞋、插件市場操作
  4. 插件維護(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.jspackage.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ā)布人

創(chuàng)建發(fā)布人.png

完善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ā)布

  1. 方法一:用vsce的vsce publish工具來發(fā)布,但是需要在官網(wǎng)配置Personal Access Token較為繁瑣磺平』耆裕可參考官方教程

  2. 方法二:在官網(wǎng)直接上傳發(fā)布


    vscode插件發(fā)布1.png

    vscode插件發(fā)布2.png

    vscode插件發(fā)布3.png

    上傳后點擊確定即可發(fā)布成功。

發(fā)布檢查

  1. 在插件市場官網(wǎng)看狀態(tài)


    vscode插件發(fā)布4.png
  2. 在插件市場官網(wǎng)搜索


    vscode插件發(fā)布5.png
  3. 在vscode插件頁搜索


    vscode插件發(fā)布6.png

以上均表示已發(fā)布成功拣挪。

插件維護(hù)

在發(fā)現(xiàn)bug和新功能開發(fā)完成后擦酌,需要更新插件,只需要將新生產(chǎn)的.vsix包上傳到官網(wǎng)即可菠劝。


vscode插件發(fā)布7.png

最后

希望有用赊舶,謝謝大家。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闸英,一起剝皮案震驚了整個濱河市锯岖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甫何,老刑警劉巖出吹,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辙喂,居然都是意外死亡捶牢,警方通過查閱死者的電腦和手機(jī)鸠珠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秋麸,“玉大人渐排,你說我怎么就攤上這事【捏。” “怎么了驯耻?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炒考。 經(jīng)常有香客問我可缚,道長,這世上最難降的妖魔是什么斋枢? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任帘靡,我火速辦了婚禮,結(jié)果婚禮上瓤帚,老公的妹妹穿的比我還像新娘描姚。我一直安慰自己,他們只是感情好戈次,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布轩勘。 她就那樣靜靜地躺著,像睡著了一般朝扼。 火紅的嫁衣襯著肌膚如雪赃阀。 梳的紋絲不亂的頭發(fā)上霎肯,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天擎颖,我揣著相機(jī)與錄音,去河邊找鬼观游。 笑死搂捧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懂缕。 我是一名探鬼主播允跑,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搪柑!你這毒婦竟也來了聋丝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤工碾,失蹤者是張志新(化名)和其女友劉穎弱睦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊额,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡况木,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年垒拢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片火惊。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡求类,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屹耐,到底是詐尸還是另有隱情尸疆,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布惶岭,位于F島的核電站仓技,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俗他。R本人自食惡果不足惜脖捻,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兆衅。 院中可真熱鬧地沮,春花似錦、人聲如沸羡亩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畏铆。三九已至雷袋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辞居,已是汗流浹背楷怒。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留瓦灶,地道東北人鸠删。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像贼陶,于是被迫代替她去往敵國和親刃泡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自 https://www.cnblogs.com/caipeiyu/p/5507252.html 前言 之前編...
    Sanjalblue閱讀 4,928評論 0 8
  • vscode插件開發(fā)步驟 說再多也不如做一遍碉怔,這里我們一起來一步步做一個插件烘贴。就做官網(wǎng)的那個demo,wordCo...
    余生社會閱讀 2,027評論 0 5
  • 最近打算給xmake寫一些IDE和編輯器的集成插件撮胧,發(fā)現(xiàn)vscode的編輯器插件比較容易上手的桨踪,就先研究了下vsc...
    waruqi閱讀 1,742評論 0 49
  • 所有的恐懼都來源于對未來的人或事的不可掌控感!
    一根火柴的故事閱讀 212評論 0 0
  • 文/壹見 感謝您的閱讀趴樱! ——獻(xiàn)給追夢路上的我們 【1】 小小有個夢想馒闷,或許那稱不上是個夢想酪捡。 那...
    壹見閱讀 331評論 0 2