2015-11-03 66 views
1

我正在爲一個Web應用程序在Go中創建一個服務器。該應用程序由Go代碼組成,這些代碼將用作應用程序的http服務器和websocket服務器。它還將包含Go代碼提供的靜態資產,例如html/css/javascript/images/etc。我打算使用go-bindata或等同物打包最終的靜態資產。所需的部署形式是一個包含所有靜態資產的二進制可執行文件。推薦使用需要編譯的靜態資產來爲項目構建項目結構和構建系統?

但是,JavaScript資產將以這樣一種方式構建和組織,即在將它們打包到Go之前需要編譯步驟包含在編譯後的二進制文件中。這將通過npm腳本/ webpack/gulp /等同來完成。

我已經閱讀了有關recommended project structure的官方Go文檔,但似乎沒有解決我的使用案例。

我不知道前端代碼和後端代碼是否應該存在於同一個git倉庫或單獨的倉庫中。我不知道構建過程應該如何處理運行javascript編譯過程,go-bindata過程和過程。有沒有推薦的方式來管理這種類型的項目或者類似的成功項目的一些例子?

回答

3

這是我做的:

$GOPATH/src/github.com/myname/myproject: 
-main.go //handlers and code 
-static.go //generated 
-static 
    -js 
     -foo.js 
    -html 
    -css 
    -img 

我用github.com/mjibson/esc一切在static轉換爲static.go一個虛擬文件系統。如果還有其他任務需要生成css/js(我運行打字稿編譯器),那麼可以在嵌入資源之前運行這些任務。

所有這一切都被有線高達go generate與評論:

//go:generate sass or tsc or grunt or whatever 
//go:generate esc -o static.go static 
+0

你不會碰巧有個倉庫方便演示了這一點,你會嗎? – DynamiteReed

+2

一個非常簡單的例子:https://github.com/bosun-monitor/bosun/tree/master/cmd/snmpTester。該回購協議中的樹是cmd/bosun包,它比較複雜。 – captncraig