2013-08-21 46 views
1
中的腳本

我正在考慮將RequireJS集成到現有的不使用AMD的Web應用程序中。我將包含我的腳本的頁面將包含許多腳本,包括jQuery和一些常見的內部腳本。將RequireJS配置爲不重新加載已包含在第

我很好奇,如果我在加載了傳統的<script>標記後,將這些腳本中的一些加載到了Require,會發生什麼情況。這裏是我的嘗試:

的index.html

<script src="js/lib/jquery.js"></script> 
<script src="js/lib/require.js" data-main="js/init.js"></script> 

init.js

require.config({ 
    paths: { 
     jquery: "js/lib/jquery" 
}); 
require(["jquery"], function($) { 
    //Do stuff 
}); 

我的希望是,需要將足夠聰明地看到,js/lib/jquery.js已經加載的頁面上,並將其用作模塊,而不是重新加載腳本。然後我檢查需要有實際上的頁面內容,發現重新加載腳本:

<script type="text/javascript" src="/js/libs/jquery.js"></script> 
... 
<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="jquery" src="/js/libs/jquery.js"></script> 

我明白,這可能是一個有點遙不可及的期望要求,以足夠的智慧做什麼,我希望它會,但如果以這種方式工作,那麼對於將Require與現有網站集成的開發者來說,這將非常方便。這樣,您就可以將原有腳本移動到AMD模塊中,而無需更改您的需求代碼。不過,也許我只是在做夢。 :)

任何人有任何想法如何做到這一點?

回答

1

奇怪的是,如果換成你的腳本標籤的順序,應該做工精細的jQuery:

<script src="js/lib/require.js" data-main="js/init.js"></script> 
<script src="js/lib/jquery.js"></script> 

jQuery有來檢查,如果AMD裝載機是定義一個名爲「jQuery的」模塊之前存在的代碼,所以如果RequireJS未被加載,那麼該模塊將不會被註冊。

這不適用於您的內部腳本,除非您修改它們以檢查是否存在AMD加載器。看到這裏就如何做到這一點背景:When designing a JS library should I make it RequireJS/AMD compatible or not?

由於the data-main script is loaded async你應該能夠假設的jQuery的腳本和requirejs會先加載init.js前,而是要使它不那麼混亂,你可能只是做像這樣:

<script src="js/lib/require.js"></script> 
<script src="js/lib/jquery.js"></script> 
<script src="js/init.js"></script> 
+0

啊,是的,是的,jQuery確實這樣做'define.amd'檢查這些天。是的,這對jQuery來說是一個很好的方式,但是你是對的 - 它不會真正幫助我使用內部腳本。 :/ – brettjonesdev