我編寫 33 個 VSCode 擴展的原因以及管理擴展的經驗


簡評:使用工具的同時自己創造一些工具或擴展,是一件很棒的事情。

以下“我”指原作者 Fabio

大家好,我叫 Fabio,是一位自學成才的開發人員,熱衷於開源和授權。我也喜歡自己制作工具,自然而然地。我為常用的 VSCode 程序編寫了很多擴展。

在開發和管理 VSCode 擴展以及談論我創造的所有擴展的同時,我想與大家再分享一些我的工作流程。

在這里我將介紹我創造的許多工具和擴展,因此無論你是要開始開發擴展,還是想要找到很酷的新擴展,或者只是需要管理很多存儲庫,本文保證會有你感興趣的內容。

編寫一個擴展

我喜歡生產力和自動化,所以我開始新項目的方式非常精簡。

工具

我編寫了一個名為 template 的開源項目,它可以基於模板快速創建新項目,非常簡單:

  1. 它需要一個文件夾作為輸入(“模板”)。
  2. 它用 handlebars 處理所有文件,要求你為模板中找到的占位符提供值(即{{name}})。
  3. 它輸出一個替換了所有占位符的新文件夾。

我了解過 yeoman,但它對於我的使用情況來說似乎太復雜了。我用過 khaos,但是它不再維護,並且它不會自動更新模板,總不能在每次我想用的時候都手動更新,所以我沒有使用它。

模板

接下來我使用我的 template-vscode-extension 模板啟動一個新的 VSCode 擴展。

現在我有一個工作的 Hello-World-ish 擴展。該模板包含許多我經常使用的輔助函數:它支持從.vscode文件夾加載自定義配置文件 ,可以自動注冊命令,還可以根據活動文件推斷當前根等。

如果我能回到過去,可能會把所有這些輔助函數放到一個獨立的vscode-utils包中,而不是在所有擴展中復制它們,不幸的是一開始我不知道將進行 10 次擴展,現在去更新它們將需要相當多的時間。

如果你在考慮編寫 VSCode 擴展,或許會想以我的擴展為基礎,我建議你制作自己的模板。

文檔

我在開發擴展時總是打開 VSCode 的文檔。雖然文檔很長,要找到你需要的 API 並不是那么簡單明了,但是只要快速閱讀一下很快你就會熟悉起來。總的來說,我對能找到的 API 相當滿意。

擴展

不管你信不信,我所做的一些擴展實際上對我開發其他擴展有一定幫助,稍后會對此進行進一步的討論。

我的擴展

正如我所說的,我喜歡生產力,所以我的大部分擴展都與生產力相關的。我盡量不要過多地重復發明輪子,確保功能在擴展之間良好分離,彼此之間良好配合。

無論好壞,我發現擴展很有趣,並且不乏可以自動化的東西,這就是為什么在第 1 個擴展之后我又做了第 2 個,第 3 個......和第 33 個!

點擊以下每個擴展程序的超鏈可以進入原頁面,獲取到更多詳細信息和屏幕截圖。

用來編寫擴展程序的擴展

2、Debug Launcher:無需定義任何任務或啟動配置即可從終端開始調試。我不想用重復的啟動配置和任務來混亂我的存儲庫。VSCode 真的應該直接支持從終端啟動調試器,對此我提了一個 issue。


從終端啟動調試器

2、StatusBar Debugger:將調試器添加到狀態欄,比默認浮動調試器干擾更少。默認工具欄的使用體驗很糟糕(相關 issue),如果 VSCode 能公開調試狀態,那這個擴展可能會好得多。

3、Install .VSIX:直接從資源管理器安裝擴展,右鍵單擊即可。因為現在安裝 .vsix 的體驗也很糟糕(相關 issue)。

4、Bump:壓縮項目的版本並更新更改日志。有意見但可配置。每個可敬的擴展都需要一個更新日志,但這並不意味着你必須手動編寫一個。這個擴展是我的最愛之一,我可能會制作一個CLI版本,希望將來它也可以為我制作 GitHub 版本。

5、Optimize Images:使用你最喜歡的應用程序優化項目中的一個或所有圖像。只需一個命令即可完成。

管理項目

6、Projects+:管理項目的擴展。功能豐富,可自定義,自動查找你的項目。Project Manager 是這種類型中最常用的擴展,但我有 100 多個存儲庫,包括一個無限可嵌套的組,我需要正確的工具來管理它們。


Projects+ 可定制的快速選擇

Projects+ 可定制的快速選擇


管理待辦事項

7、Todo +:輕松管理待辦事項列表。功能強大,易於使用和可定制。如果你不需要對TODO文件進行語法高亮,可能只想要內置的基本高亮顯示,那么可以查看 Todo Tree。


Todo + 語法高亮和項目級統計

8、Highlight:基於正則表達式的高級文本高亮顯示。適用於待機,注釋等。大多數人只是使用 TODO Highlight,但我的方式更通用,更強大,也可能更快。

9、Markdown Todo:輕松管理 markdown 文件中的待辦事項列表。沒什么特別的,但是它可以讓一些 Todo + 的快捷方式基本上可以在 Markdown 文件中使用。

10、Projects + Todo +:鳥瞰你的項目,將所有的 ToDo 文件聚合為一個。如果你使用 Projects + 來管理項目,且使用 Todo + 來管理待辦事項,那么現在可以將所有(或部分)項目中的所有待辦事項匯總到一個文件中。

在...中打開...

在不同的應用程序/網站之間快速切換對我來說很重要,這就是我做了很多Open in...擴展的原因。

11、Open in Application:在默認的應用程序或你想要的應用程序中打開任意文件。廣義Open in...擴展。

12、Open in Browsers:添加一些命令,用於在任何你喜歡的瀏覽器中打開當前文件或項目,甚至可以同時在所有瀏覽器中打開。

13、Open in Code:輕松地在代碼和代碼內部之間切換。

14、Open in Finder:添加一些命令用以在 Finder 中打開當前文件或項目。

15、Open in GitHub:在 github.com 中打開當前項目或文件。還有很多其他的擴展可以實現這個功能,但是當我試用時,發現它們非常臃腫,有很多我不需要或不起作用的東西。

16、Open in GitTower:添加一個在 GitTower 中打開當前項目的命令。

17、 Open in Marketplace:添加用於在 Marketplace 中打開當前項目的命令。

18、Open in node_modules:在 node_modules 中打開當前選擇或任意字符串。當你想深入了解你正在使用的模塊時很有用。

19、Open in NPM:在 npmjs.com 中打開當前選擇、項目或任意字符串。有助於快速查看自述文件。

20、Open in Ship:添加用於在 Ship 中打開當前項目的命令。不幸的是,Ship 已被棄用,它不再起作用了。我現在在 Noty 中有一個專門的標簽來管理即將發生的問題。

21、Open in Terminal:添加一些命令以在終端中打開當前項目。

22、Open in Transmit:添加一些命令用以在 transmit 中打開當前文件或項目。

** 其他 **

23、Browser Refresh:從代碼中使用 ⌘R 刷新瀏覽器。無需將焦點切換到它。當你無法使用熱重載,並且不希望瀏覽器在不需要時同步刷新頁面,它會非常有用。

24、Commands:從狀態欄觸發任意命令。支持傳遞參數!


通過命令定義的自定義命令

25、Diff:Diff 2 可以輕松打開文件。因為運行code — diff path1 path2太慢了。

26、Git File History::查看或區分當前文件的歷史版本。其他類似的擴展不好用。

27、GitHub Notifications:一個安全,可自定義的狀態欄圖標,提醒你有關 GitHub 上的通知。

28、Monokai Night Theme:完整,黑暗和簡約的 Monokai 風格主題。我試用過的主題沒有一個好用,所以我不得不做出自己的主題。


Monokai Night Theme

29、No [Unsupported]:從標題欄中刪除 “[Unsupported]” 的擴展名。現在不推薦使用,我建議使用 Fix VSCode Checksums。相關討論見 issue 1 和issue 2。

30、Open Multiple Files:同時打開文件夾中的所有文件,可選擇用 glob 過濾。

31、Search — Open All Results:用一個命令同時打開所有搜索結果。

32、Terminals Manager:一次性設置多個終端或僅運行某些命令的擴展。這實際上是我做的第一個擴展。

33、Transmit:添加一些命令用以與 Transmit 進行交互。

介紹這些花了不少時間,講一個有趣的小事:我想我的賬戶上發布的擴展最多,緊隨微軟之后,至少我還沒有發現有人發布了比我更多的擴展(寫完本文后發現 Greg 比我多做了 2 次擴展,我得加油了)

管理擴展

管理多個存儲庫可能是一個挑戰,以下是我的工作方式。

重復提交

遲早你會想要更改所有存儲庫中的某些內容,這意味着需要在多個存儲庫中進行基本相同的提交,無聊而浪費時間。

為了實現這類任務的自動化,我制作了 autogit,它是一個跨多個存儲庫執行命令的工具。


通過 autogit 執行 shell 命令的示例

我一直在尋找它的用途,最近我用它對我所有擴展的存儲庫進行了以下更改:

  • 捆綁webpack:我發現啟動時間提高了約 80%。
  • 忽略package-lock.json:這只是我提交歷史中的垃圾信息,閱讀本 issue參考 Sindre Sorhus 關於忽略 package-lock.json 的見解。
  • 更新tsconfig.json以輸出最新的代碼:我使用了相當多的異步函數,但當目標版本為<=es5時,異步函數被轉換為慢速代碼,並且由於 VSCode 與 Node.js 的現代版本一起發布,所以不需要這樣做。
  • 刪除了 TSLint:我關注到我基本上忽略了它的輸出,所以我刪除了對 linting 的支持。
  • 在 readme 中使用高分辨率 logo:在 readme 中使用高分辨率 logo 而不是之前使用的128x128 的 logo,遺憾的是我沒有特別好的 logo,這是另一個故事了 :)

可以看到 autogit 如何在 33 個存儲庫中快速地執行這 5 項更改。

使用 GitHub 同步描述和關鍵字

這是一個不必做的事情,但是如果有一個工具能為你做這件事,那就太好了。幸運的是,autogit 和 autogit-command-github-sync 命令也能做到這一點:


通過 autogit 同步

我還制作了autogit-command-github-publish,用於自動創建 GitHub 存儲庫。

報告

在做了最初幾次擴展后不久,我開始對了解他們獲得了多少新下載感興趣。你可以在一個頁面中查看所有擴展程序,例如,您可以在此處找到我的擴展程序,但如果你不記得上次檢查時擴展程序的下載次數,則無法知道新增了多少。這是我制作 rssa 的原因,這個工具可以告訴你什么時候會發生變化。你可以用它來監控幾乎所有可用 URL 訪問的內容。


自定義 rssa 輸出

如果有圖表那就更棒了,雖然我還沒有發布這個工具,但是利用 rssa 的歷史我們可以生成圖表,下面是 Todo+ 的下載次數的圖表:


Todo +下載

需要注意的是,有時候下載量會急劇增加,當發布新的更新時,就會出現這種情況,因為更新被視為下載😅,任何人都可以通過推送許多次更新來擁有具有一百萬次下載的擴展,這是應用市場的一個問題。

謝謝

很開心你看到了最后!謝謝你的閱讀,希望你在這里找到了有用的內容。

在評論聊一聊你是如何開發 VSCode 擴展的,以及你使用了什么擴展吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM