2012-03-23 25 views
8

我有一個使用Require.js for AMD的Backbone應用程序。我從Google CDN加載jQuery,但在構建之後,jQuery的路徑似乎被破壞了。Require.js使用CDN構建(r.js)jQuery沒有鏈接到良好的jQuery路徑

構建正在發生,沒有任何問題或錯誤。但是,一旦我用的是內部版本,jQuery是用這個URL添加到頁面:

http://example.com/assets/js/jquery.js

取而代之的CDN網址。我覺得這是由於我的路徑配置丟失並且需要依賴於「jquery」的事實不被視爲對路徑的引用,而是作爲對腳本的正常調用。

這是我的主文件:

main.js

require.config({ 
    baseUrl: '/assets/js/', 
    paths: { 
      use: 'libs/use-0.2.0.min', 
      jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min', 
      underscore: 'libs/underscore-1.3.1.min', 
      backbone: 'libs/backbone-0.9.2.min' 
}, 
    use: { 
      'underscore': { 
        attach: '_' 
      }, 
      'backbone': { 
        deps: ['use!underscore', 'jquery'], 
        attach: function(_, $) { 
          return Backbone; 
        } 
      } 
    } 
}); 

require(['views/app'], function(AppView){ 
    var app_view = new AppView(); 
}); 

app.build.js

({ 
appDir: "../../www", 
baseUrl: "assets/js", 
dir: "../../build", 
optimizeCss: "none", 
optimize: "uglify", 
findNestedDependencies: true, 
preserveLicenseComments: false, 
paths: { 
    use: 'libs/use-0.2.0.min', 
    jquery: 'empty:', 
    underscore: 'libs/underscore-1.3.1.min', 
    backbone: 'libs/backbone-0.9.2.min' 
}, 
modules: [ 
    { 
     name: "main", 
     include: ["views/app"], 
     exclude: ["jquery"] 
    } 
], 
use: { 
    'underscore': { 
     attach: '_' 
    }, 
    'backbone': { 
     deps: ['use!underscore', 'jquery'], 
     attach: function(_, $) { 
      return Backbone; 
     } 
    } 
} 
}) 

(和我使用的裝載use.js非AMD插件)

+0

一些調查研究後,會出現這種行爲是由use.js – 2012-03-27 19:27:39

+0

RequireJS 2.0現在用'shim'這確實幾乎一樣use.js引起 – 2012-06-04 10:58:41

回答

3

我會首先升級到最新的RequireJS,並檢查了此鏈接:

http://requirejs.org/docs/optimization.html#empty

和Notes上CDN在本節:

http://requirejs.org/docs/api.html#config

require.config({ paths : {} })本地回退的例子:

上述模式用於檢測加載失敗,undef()模塊,修改路徑和重新加載是一個普遍的請求,它也有一個簡寫。該路徑配置允許陣列值:

requirejs.config({ 
    // To get timely, correct error triggers in IE, 
    // force a define/shim exports check. 
    enforceDefine : true, 
    paths : { 
     jquery : [ 
      '//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min', 
      //If the CDN location fails, load from this location 
      'lib/jquery' 
     ] 
     // etc. 
    } 
}); 
+0

這不完全是問題的答案。但是我對使用require.js 2.x系列的新項目沒有任何問題,所以對於其他人來說升級可能是一個正確的答案。 – 2012-11-28 16:59:21

+0

第一個鏈接現在有一個不存在的答案。爲什麼問題應該在這裏解釋解決方案的原因之一,而不僅僅是連接到外部參考... _sigh_ – kaiser 2013-09-02 08:49:33