Vugu是用於Web和針對WebAssembly的Web UI的實驗庫。指南和文檔https://www.vugu.org。 https://godoc.org/github.com/vugu/vugu的Godoc。
如果您曾經想在JS中寫一個UI,而是純粹的GO ...現在在您的瀏覽器中運行它……那個(實驗;)未來就在這裡!
引入vugu(發音 /ˈvuː。ɡ/),這是一個在go targeting wasm中的vuejs啟發的庫。
沒有節點。沒有JS。沒有NPM。沒有NODE_MODULES文件夾與您的音樂庫競爭磁盤空間。
入門:http://www.vugu.org/doc/start
仍在進行中,但是很多事情已經起作用。有些工作真的很好。
您必須使用V1.22.3的最低限度才能使用vugu 。我們需要GO v1.22中引入的循環更改,而V1.22.3是當時寫作的最後一次更改。
vugu vugu現在使用法師來管理vugu工具的構建vugugen , vugufmt和vgfrom 。法師還用於管理測試過程。
請參閱《貢獻者指南》中更新的構建指令
要運行示例,您必須安裝mage工具, docker和goimports 。 vugu使用mage管理構建過程。
安裝mage的最簡單方法是:
git clone https://github.com/magefile/mage
cd mage
go run bootstrap.go
您必須從vugu的模塊根中運行mage ,這是最高go.mod的目錄。
您還需要安裝goimports工具。通常,您已經將其安裝了,通常是編輯插件的一部分。如果不是,則可以安裝以下方式:
go install golang.org/x/tools/cmd/goimports@latest
為了運行示例,您還需要安裝docker 。如果您沒有安裝docker ,請按照Docker安裝說明進行操作。每個示例將由本地nginx容器提供。
所有示例都是examples目錄中的。 examples的每個子指導都包含一個示例。每個示例是它自己的GO模塊。
構建和服務所有示例很簡單:
cd path/to/vugu
mage examples
或者
cd path/to/vugu
mage -v examples
每個示例將以形式的URL提供
http://localhost:8888/<name-of-example-directory>
例如,要查看fetch-and-display示例,URL將是:
http://localhost:8888/fetch-and-display
或者,如果您只想運行一個示例,請使用:
cd path/to/vugu
mage singleExample <name-of-example-module>
例如,僅服務於fetch-and-display示例,命令將是:
cd path/to/vugu
mage singleExample github.com/vugu/vugu/example/fetch-and-display
如果您需要創建一個新示例,則過程相當簡單。關鍵點是將其基於一個工作示例。
例如
cd /path/to/vugu
cp -r ./examples/fetch-and-display/ ./examples/my-new-example
cp將將包括關鍵本地.gitignore文件(包括關鍵的本地.Gitignore文件)中的所有內容複製到新示例目錄。請讓Sire在出現.gitignore ,以確保未向存儲庫提交Vugu生成的文件。
然後,您需要編輯./examples/my-new-example/go.mod以更改模塊名稱。此步驟至關重要。
必須更改模塊名稱以匹配示例,因此在這種情況下,模塊名稱將更改為github.com/vugu/vugu/examples/my-new-example
然後,您可以根據需要編輯root.vugu , root.go來支持示例,或根據需要添加更多*.vugu和*.go文件。
文件main_wasm.go和wasm_exec.js不應編輯。
示例index.html文件將需要在兩個不同的位置進行編輯。第一個是大約11號線
<script src="/fetch-and-display/wasm_exec.js"></script>
改變路徑以反映示例的名稱。在這種情況下:
<script src="/my-new-example/wasm_exec.js"></script>
第二個變化是相似的,但反映了main.wasm二進制路徑。這是大約29號線
WebAssembly.instantiateStreaming(fetch("/fetch-and-display/main.wasm"), go.importObject).then((result) => {
在這種情況下,將更改為:
WebAssembly.instantiateStreaming(fetch("/my-new-example/main.wasm"), go.importObject).then((result) => {
然後可以建立並提供新示例:
cd /path/to/vugu
mage examples
或單獨喜歡:
cd /path/to/vugu
mage singleExample github.com/vugu/vugu/example/my-new-example
<tag :prop='expr'> 。 它構建的更像是圖書館,而不是一個框架。雖然Vugu確實為您的.vugu組件文件進行代碼生成,但(甚至將輸出一個默認的main_wasm.go為一個新項目輸出,並在頁面刷新時自動構建程序),但從根本上講,您仍處於控制狀態。總體程序流,應用程序接線和初始化,使頁面與組件保持同步的渲染循環 - 您可以控制所有這些。框架調用您的代碼。 Vugu是一個庫,您的代碼調用它(即使Vugu在一開始就為您生成了一點,以使事情變得更容易)。 Vugu首先遇到的Vugu的主要目標之一是使其非常快速,易於啟動,但不會對項目的結構構成不必要的限制。 GO構建工具(現在是模塊系統)很棒。這個想法是要在可能的情況下利用它,而不是重新編程輪子。
因此,您找不到運行開發服務器的Vugu命令行工具,而是在文檔中找到可以粘貼到文件中並自己go run適當代碼段。對於代碼生成,當時有一個可以在頁面刷新時執行此操作的http.handler,您也可以(並且應該!)通過go generate來運行vugugen 。 Vugu中有許多小的決定遵循這種理念:無論可能有合理的可能,只需使用現有的機製而不是重新發明即可。並繼續這樣做,直到有證據表明確實需要其他東西。到目前為止,它的運行良好。它允許Vugu專注於它帶給桌子的特定事物。
實現示例可以在示例存儲庫中找到
由於您的大多數代碼都將在.vugu文件中,因此您需要安裝vscode-vugu信用來@binhonglee。