亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go HTML 模板中的自動資產修訂文件名

Go HTML 模板中的自動資產修訂文件名

Go
RISEBY 2021-12-06 16:37:58
我正在尋找有關實現在 Go HTML 模板中自動包含版本化文件名的幫助。例如,在我的模板中,我的頭中有這樣的東西:<link rel="stylesheet" href="{{ .MyCssFile }}" />樣式表本身有一大塊 MD5 哈希附加到來自名為 gulp-rev 的 gulp 腳本的名稱stylesheet-d861367de2.css目的是確保瀏覽器獲取新的更改,但也允許緩存。以下是 Django 中的示例實現,以獲得更好的解釋:https://docs.djangoproject.com/en/1.9/ref/contrib/staticfiles/#manifeststaticfilesstorageStaticFilesStorage 存儲后端的子類,它通過將文件內容的 MD5 哈希附加到文件名來存儲它處理的文件名。例如,文件 css/styles.css 也將保存為 css/styles.55e7cbb9ba48.css。此存儲的目的是繼續提供舊文件,以防某些頁面仍然引用這些文件,例如因為它們被您或第 3 方代理服務器緩存。此外,如果您想將遠期的 Expires 標頭應用于已部署的文件以加快后續頁面訪問的加載時間,這將非常有用?,F在我想知道如何最好地在 Go 中實現這一點?我打算從內置文件服務器提供文件。我目前的想法是:有一個循環來檢查目錄中的最新樣式表文件。聽起來很慢。對通用命名的文件進行某種重定向/重寫(如 file.css 是根據對 file-hash.css 的請求提供的)。讓 Go 自己管理資產命名,附加哈?;驎r間戳。也許它用 nginx 或其他東西處理得更好?
查看完整描述

2 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

編寫一個模板函數來解析名稱。這是一個示例模板函數:


func resolveName(p string) (string, error) {

  i := strings.LastIndex(p, ".")

  if i < 0 {

    i = len(p)

  }

  g := p[:i] + "-*" + p[i:]

  matches, err := filepath.Glob(g)

  if err != nil {

    return "", err

  }

  if len(matches) != 1 {

    return "", fmt.Errorf("%d matches for %s", len(matches), p)

  }

  return matches[0], nil

}

以下是注冊為函數“resolveName”時如何在模板中使用它:


<link rel="stylesheet" href="{{ .MyCssFile | resolveName }}" />

playground example


每次渲染模板時,此函數都會解析文件的名稱。更聰明的函數可能會在解析名稱時緩存名稱,或者在啟動時遍歷目錄樹以預構建緩存。


查看完整回答
反對 回復 2021-12-06
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

我知道它太舊了,但也許這個圖書館會幫助你。它允許收集和散列靜態文件。它還具有將文件路徑從原始位置反轉到散列位置的功能:


staticFilesPrefix := "/static/"

staticFilesRoot := "output/dir"


storage := NewStorage(staticFilesRoot)

err := storage.LoadManifest()


funcs := template.FuncMap{

    "static": func(relPath string) string {

        return staticFilesPrefix + storage.Resolve(relPath)

    },

}

tmpl := template.Must(

    template.New("").Funcs(funcs).ParseFiles("templates/main.tpl")

)

現在您可以像這樣在模板中調用靜態函數{{static "css/style.css"}}。調用將轉換為/static/css/style.d41d8cd98f00b204e9800998ecf8427e.css.


查看完整回答
反對 回復 2021-12-06
  • 2 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號