我將使用我實際正在做的事例作爲示例。我有一個淘汰賽的自定義綁定,這取決於jquery插件,它本身依賴於jQuery UI,當然取決於jQuery。有依賴於其他插件的另一個文件,並依賴於jQuery用戶界面等。在require.config.js另一個文件我有:require.js中的顯式和隱式依賴關係處理
shim: {
"jquery-ui": {exports: "$", deps: ["jquery"]},
"jquery-plugin1": {exports: "$", deps: ["jquery-ui"]},
"jquery-plugin2": {exports: "$", deps: ["jquery-ui"]}
}
這個工作,然後在相應的文件,我可以這樣做:
define(["jquery-plugin1"], function ($) {
不過,我也可以這樣做:
define(["jquery", "jquery-ui", "jquery-plugin1"], function ($) {
也存在其中一個文件可能取決於兩個插件的情況下:
// which one?
define(["jquery-plugin1", "jquery-plugin2"], function ($) {
define(["jquery", "jquery-ui", "jquery-plugin1", "jquery-plugin2"], function ($){
還可能有其他的相關性,如基因敲除自定義綁定(這不需要任何出口),所以我也結了:
define(["jquery-plugin1", "model1", "model2",
"ko-custom1", "ko-custom2", "ko-custom3",
"jquery-plugin2"],
function ($, m1, m2) {
這個文件也可能取決於jQuery用戶界面(這取決於jQuery),但這些都是通過插件隱式加載的。
我的問題是更好地明確所有要求(即在define
中包括jQuery和jQuery-UI),並且可能會取消導出,或者是不太詳細的嵌套依賴關係處理首選?
我更喜歡將jQuery作爲一個全局變量 - 儘管有些人可能對此有強烈的觀點,但它讓事情變得更容易。在進行單元測試時,我運行的是使用Node中全局jQuery變量的相同腳本,所以它確實不是問題。你可能也可能包括jQuery UI作爲一個全局變量,但你真的需要它嗎?通常會有一個不那麼臃腫的庫,它可以滿足你需要的一切,甚至更好。但是如果你在應用程序中廣泛使用它,我也會把它放在全局命名空間中。您不必以這種方式處理墊片或加載訂單。 –