Go:用bindata嵌入JS文件

时间:2015-01-12 13:54:26

标签: go

这个问题是我早期问题的后续问题。我已经结束了这个问题,所以我希望我能在这里提出一个新的但相关的问题。 Go: embed static files in binary

如何使用go-bindata提供JS文件?我将它传递给像这样的HTML

hi.html

<script>{{.Bindata}}></script>

即使我没有编译或JS错误,似乎也无法正常工作。

3 个答案:

答案 0 :(得分:2)

使用https://github.com/elazarl/go-bindata-assetfs

假设您有以下结构:

myprojectdirectory
├───api
├───cmd
├───datastores
└───ui
    ├───css
    └───js

ui是您要整理并打包到您的应用中的目录结构......

生成源文件

go-bindata-assetfs工具非常简单。它将查看您传递给它的目录,并生成一个源文件,其中的变量可以包含这些文件中的二进制数据。因此,请确保您的静态文件存在,然后从myprojectdirectory运行以下命令:

go-bindata-assetfs ./ui/...

现在,默认情况下,这将在包main中创建一个源文件。有时,这没关系。就我而言,它不是。如果您愿意,可以生成具有不同包名称的文件:

go-bindata-assetfs.exe -pkg cmd ./ui/...

将源文件放在正确的位置

在这种情况下,生成的文件bindata_assetfs.go myprojectdirectory 目录中创建(不正确)。就我而言,我只是手动将文件移动到 cmd 目录。

更新您的应用程序代码

在我的应用中,我已经有了一些代码从目录中提供文件:

import (
    "net/http"
    "github.com/gorilla/mux"
)

// Create a router and setup routes
var Router = mux.NewRouter()    
Router.PathPrefix("/ui").Handler(http.StripPrefix("/ui", http.FileServer(http.Dir("./ui"))))

// Start listening
http.ListenAndServe("127.0.0.1:3000", Router)

首先确保此类内容正常运行。然后,将FileServer行更改为:

是微不足道的
Router.PathPrefix("/ui").Handler(http.StripPrefix("/ui", http.FileServer(assetFS())))

编译应用

现在您有一个生成的源文件,其中包含您的静态资源。您现在可以安全地删除&#39; ui&#39;子目录结构。用

编译

go install ./...

你应该有一个能够正确提供静态资产的二进制文件。

答案 1 :(得分:0)

使用https://github.com/elazarl/go-bindata-assetfs

自述文件:

go-bindata-assetfs data/...

在代码设置中,使用文件服务器

http.Handle("/", http.FileServer(assetFS()))

答案 2 :(得分:0)

我在这里得到答案:Unescape css input in HTML

var safeCss = template.CSS(`body {background-image: url("paper.gif");}`)