2015-12-05 7 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 - это на самом деле требуется как jquery. То есть, делать require(['libs/jquery'], ... будет запрашивать RequireJS для загрузки модуля jquery, расположенного в libs/. Однако это не тот случай. Имя модуля требуемого модуля - это полное имя, указанное в списке зависимостей. Поэтому в приведенном выше вызове 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

Смежные вопросы