在我平時的工作中會經常用到svn blame這個命令,但是vscode現有的svn擴展普遍都不能自定義右鍵菜單。
所以我產生一個想法:自己動手為vscode開發一款svn的擴展來定制右鍵菜單,本文記錄這個svn擴展的開發記錄,此擴展開發約耗時周末中的一天。
最終成果:在vscode擴展中搜索:svnHelper就可以找到我編寫的svn擴展,商店下載地址:https://marketplace.visualstudio.com/items?itemName=qingqingzhao.svnhelper
vscode的svn擴展源代碼
重點:這幾個庫拉下來之后,我嘗試直接通過vsce package指令生成vsix,全部都失敗了,編譯代碼時有不同的出錯,只能去看vscode的開發文檔。
這里我列一下我找到的幾個開源的vscode的tortoise svn 擴展,每個倉庫的代碼我大概掃了一下:
如果想自己往右鍵菜單中添加選項,這個擴展的源代碼比較簡單易懂:https://github.com/florentulve/vstortoise
這個可以提交整個workspace:https://github.com/fantacytyx/vscode-tortoise-svn
這個提供很多的命令,https://github.com/cdsama/tortoise-svn-for-vscode
其它解決辦法
在時間急迫的情況下,我找到了這個神器,在vscode中可以打開系統右鍵菜單,這樣也可以滿足我的需求,只是它需要多點一下鼠標
Windows Explorer Context Menu:https://marketplace.visualstudio.com/items?itemName=florentulve.vstortoise
github上源碼報的錯
上述幾個源碼庫在編譯時無一列外都會報錯,我猜原因可能是我安裝的nodejs和vscode版本太新有關系,因為這些庫都是三四年前的。
我的操作步驟是看vscode的官方文檔來操作的,步驟如下:
首先通過npm install來安裝依賴,但會報:Cannot find module 'vscode'.
然后npm install vscode 之后,再次編譯就有一堆的 node.d.ts編譯出錯
嘗試過修改package.json中依賴庫的版本之后,還是無法解決編譯時的報錯。
結論:期間還出現可以調試,但打包為vsix就會有不一樣的報錯,最終我放棄了折騰上述幾個庫,自己重新開始一個項目開發。
vscode擴展開發學習資料
新建一個vscode的擴展項目:范例-hello-world-Microsoft Visual Studio Code 中文手冊 (cntofu.com)
推薦這個系列,有配圖講的很清晰:VSCode擴展開發全攻略(三)package.json詳解-好記的博客 (haoji.me)
微軟的文檔及例子
微軟的例子:https://github.com/microsoft/vscode-extension-samples
微軟VSCode擴展開發官方文檔:https://code.visualstudio.com/docs/extensions/overview
生成vsix及發布到市場文檔:https://code.visualstudio.com/api/working-with-extensions/publishing-extension
書籍
如果時間充實的同學,可以看看微軟韓老師的這本書《Visual Studio Code 權威指南》,在第15章有講到如何開發一個vscode擴展
開發擴展的步驟
需要下載nodejs,用來編譯及發布
需要安裝的庫:
用來生成新建項目的:npm install -g yo generator-code
用來打包vsix的:npm i vsce -g
開發擴展的步驟
- cd到你要把項目保存的路徑,然后通過yo code新建一個項目,然后選項項目的開發語言,熟悉C#的可選TypeScript
- 編寫擴展代碼
- 按F5運行擴展,或者在運行調試這里,運行或新建調試項:Run Extension
- vsce package,把擴展打包為vsix文件
- vsce publish,把擴展發布到商店
發布到vscode商店
這個命令不能使用了:vsce create-publisher your-publisher-name
需要到這個網站進行操作(提交的時候可能需要掛VPN):https://aka.ms/vscode-create-publisher
發布遇到問題
這個報錯需要在package.json中把publisher的名字與申請的發布名字一致
ERROR The Personal Access Token verification has failed. Additional information:
Error: Access Denied: e2d743d1-0ffd-4e04-a41d-c894878f29ba needs the following permission(s) on the resource /qingqingzhao to perform this action: View user permissions on a resource
開發及發布的注意事項
ps:開發過程中還遇到了其它的問題,可參考我的這篇文章《知乎vscode插件修改和重新編譯》
發布的注意事項如果repository有填則會檢查github倉庫?看到有篇文章中寫道,因為我是放在gitee上的,所以我沒填。
建議往項目中添加這幾個文件,否則每次打包時都會需要你二次確認
LICENSE.txt
CHANGELOG.md
package.json中的name建議全小寫,否則會有黃色警告線,每一項的意思如果不清晰的話,把鼠標移上去就會有提示這項是干啥的。