2013-10-21 16 views
2

爲避免瀏覽器緩存我優化的JS捆綁包,我想在請求URL中包含MD5總和。我想是這樣的:RequireJS data-main查詢字符串不工作

<script src="lib/require.js" data-main="app/main.js?md5=ABCD"></script> 

但是引進的查詢字符串會導致GET請求/main.js。也就是說,查詢字符串丟失,甚至scripts從路徑中丟失。

我該如何強制對data-main中指定腳本的請求加載我計算的散列值?請注意,標記正在生成,所以我可以在HTML文檔的任何位置注入散列。

+0

可能重複(http://stackoverflow.com/questions/8315088/prevent-requirejs-from-caching-required-scripts) – kryger

+0

@ kryger,我們編輯過去的技術以避免在非主要腳本上緩存問題。但是,該配置不會影響從'data-main'加載腳本,除非直接將它包含在HTML中,以便在RequireJS腳本啓動前執行它。這個問題是相關的,但有微妙的不同,事實上,在提出這個問題之前,我讀了另一個問題。希望這可以幫助別人。 –

回答

3

訣竅是使用urlArgs配置設置。所以,在這個例子中的代碼應類似於:

<script> 
require = { 
    urlArgs: 'md5=ABCD' 
}; 
</script> 
<script src="lib/require.js" data-main="app/main.js"></script> 

確保您加載require.js庫之前定義全局require對象

這工作,因爲RequireJS在啓動時運行下面的代碼(如V2.1.10,請參閱線unminified源190):

//Allow for a require config object 
if (typeof require !== 'undefined' && !isFunction(require)) { 
    //assume it is a config object. 
    cfg = require; 
    require = undefined; 
} 

檢查瀏覽器的開發工具,你應該看到的在查詢字符串參數:

enter image description here

[從高速緩存所需的腳本防止RequireJS]的
+0

這個問題是data-main異步加載,同時你正在加載urlArgs。儘管在設置配置之前,一個很小的機會main.js會加載,但它仍然是一個硬編碼的假設。我仍然想知道如何從data-main( – TruMan1

+0

@ TruMan1)獲取查詢字符串參數,我已經使用刪除競爭條件的代碼更新了我的答案。 –