其實有挺長一段時間沒有寫自己的 VS Code 插件了!
還是要感謝我們 DevDiv 組的 Flexible Friday 活動,讓我可以在工作日研究自己感興趣的項目。
Flexible Friday:今天,上班不幹活!
我的 Flexible Friday 是一個Hack類型項目:
Run Any Language in Browser (Code Runner for Web)
Flexible Friday 是每個月一次的,上個月是第一次。但是自從開始調研這個項目後,覺得還是很有意思的!于是這周周六,準備搞一個 PoC 出來!
我,選擇了世界上第二好的語言 —— Python。
其實在之前的文章,我也說過了,現在主流的所謂的在浏覽器運作任何語言的方式主要是兩種:
浏覽器隻是個展示和互動層,真正的編譯和運作還是在後端。
相對進步不少的是:在後端把代碼編譯成 WebAssembly,然後在浏覽器中運作。
然而,這兩種方式都少不了 server 端的支援。那麼,有沒有方法可以不用後端,整個編譯(或者解釋)和運作都放在浏覽器呢?
我對不同語言都進行了調研。然後,發現了 Pyodide:
https://github.com/pyodide/pyodide
這個項目最初由 Mozilla 主導開發,現在已經是獨立的開源項目了!
通過 Emscripten,Pyodide 把 CPython 解釋器預先編譯成 WebAssembly,使得 Python 檔案可以運作!

既然找到了方法,那就趕緊實作一個 VS Code 插件吧!
于是,花了小半天時間寫好了!
那麼,插件叫啥名字呢?
之前寫過一個 Code Runner 插件。
我寫的 Code Runner,下載下傳量突破 3000 萬了!
那麼,這個新插件,就叫 Code Runner for Web 吧!
https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner-for-web
看看運作效果截圖:
Linux,mocOS,Windows 的 VS Code 也能裝。你本地沒裝 Python的話,也能直接運作 Python!
vscode.dev 和 github.dev 也都支援!
不知道是不是 VS Code 插件市場的搜尋有問題,直接搜 Code Runner for Web 可能搜不到。大家可以加個雙引号來搜尋:"Code Runner for Web"
目前還支援标準的 Python 庫,未來會支援更多 pip 包~
未來會看看對其他語言的支援!
第一版釋出到插件市場後,在 vscode.dev 試了下。發現 Edge 是正常的,但 Chrome 不行。
查了下 console log 發現這個 error:
Failed to set the 'innerHTML' property on 'Element': This document requires 'TrustedHTML' assignment.
好家夥!我在 VS Code 的 WebView 使用了 document.getElementById("my-id").innerHTML 來改頁面内容,竟然到了 Chrome 就行不通了!
不過,難不倒我 workaround 小能手!
放棄 h2 标簽,改用 input + disabled 大法!使用 document.getElementById("my-id").value
輕松解決!
項目已經開源,也歡迎大家來圍觀:
https://github.com/formulahendry/vscode-code-runner-for-web
對了,我們組也在招人,歡迎和我一起來 Flexible Friday 帶薪搞感興趣的項目哈:
微軟内推常見問題 Q&A
微軟 DevDiv 熱招:一次編寫,處處運作。微軟在下一盤大棋!
已内推 80 人拿到微軟 offer!