2015-12-05 48 views
1

我有一個使用requirejs的最簡單的項目。一個數據主文件是JS/default.jsrequirejs無法看到jquery

enter image description here

你可以看到有兩種jQuery的文件。 RequireJS只能看到位於同一水平default.js所以這個代碼:

require(
    ['jquery', 'modules/module1', 'modules/module2'], 
    function($, Module1, Module2){ 
     $('body') 
      .append(Module1.phrase) 
      .append('<hr/>') 
      .append(Module2.ask); 
    } 
); 

...作品

但是,如果我改變[ 'jQuery的',...[ '庫/ jQuery的',...,它揭示了一個錯誤:

Uncaught TypeError: $ is not a function 

有什麼不對嗎? 整個代碼是在這裏:http://plnkr.co/edit/QuFsKN597RD873MOlUw8?p=preview

+0

你或許應該看到:HTTP: //requirejs.org/docs/jquery.html – CyrilleGuimezanes

回答

2

的jQuery的確應該被要求作爲jquery

現在,關於模塊名稱可能仍然存在混淆。有人可能會看看依賴關係libs/jquery並推斷jQuery 實際上是需要的。也就是說,如果require(['libs/jquery'], ...會要求RequireJS加載位於libs/中的模塊jquery。但是,並非如此。所需模塊的模塊名稱是依賴列表中列出的全名。因此,在上面調用require時,所需模塊的模塊名稱爲libs/jquery。但jQuery呼籲define('jquery', ...宣佈自己RequireJS。模塊名稱(第一個參數是jquery,不libs/jquery從而RequireJS無法找到該模塊請求

一個平凡的解決方法是增加一個paths配置:

paths: { 
    jquery: 'libs/jquery' 
} 
1

請看看在requirejs文檔:

jQuery defines named AMD module 'jquery' (all lower case) when it detects AMD/RequireJS. To reduce confusion, we recommend using 'jquery' as the module name in your requirejs.config.

http://requirejs.org/docs/jquery.html