2013-11-14 3 views
2

Я новичок в RequireJS, и я пытаюсь загрузить плагин с использованием техники прокладки. В идеале я хотел бы оставить плагин в другом каталоге.RequireJS прокладки для jQuery-плагина

Независимо от того, что я делаю, я получаю ошибку сценария (даже если плагины находятся в базовом каталоге.) Вот моя конфигурация RequireJS. picker.date.min требует picker.min

require.config({ 
    baseUrl: '/js', 
    paths: { 
     jquery:  'vendor/jquery/jquery-2.0.3.min', 
     pickadate:  'vendor/pickadate/picker.min', 
     pickadatedate: 'vendor/pickadate/picker.date.min' 
    }, 
    shim: { 
     jquery: { 
      exports: '$' 
     }, 
     pickadate:  ['jquery'], 
     pickadatedate: ['jquery', 'pickadate'] 
    } 
}); 

Вот сценарий я использую на моей странице

require(['jquery', 'pickadate', 'pickadatedate'], function($) { 

    $('#start_date').pickadate(); 

}); 

Ошибка я получаю: GET http://domain.com/js/pickadate.js 500 (Внутренняя ошибка сервера) требуют, JQuery. js: 1854 Ошибка при отсутствии: ошибка скрипта

Может ли кто-нибудь помочь?

+1

Если '' pickadatedate '' требует '' pickadate'' ваша прокладка должна быть '' pickadatedate: ['jquery', 'pickadatedate] '' –

+0

также вам нужно передать то, что требуется в y наш модуль –

+0

@NickTomlin Я предполагаю, что вы имели в виду, что прокладка должна быть 'pickadatedate: ['jquery', 'pickadate]'? Я обновил код выше, до того, что у меня есть, и он по-прежнему вызывает одни и те же ошибки. Прокладки, похоже, полностью игнорируют пути. Правильно ли я это делаю? – Leon

ответ

1

jquery уже совместим с AMD, поэтому вам не нужна прокладка. Также pickadatedate не нуждается в зависимости от jquery, потому что это уже подразумевается, завися от pickadate. Вы можете упростить как:

shim: { 
    pickadate:  ['jquery'], 
    pickadatedate: ['pickadate'] 
} 

Однако данное изменение не решит проблемы. Указанная вами ошибка обычно не вызвана отсутствующими сценариями. Если requirejs не смог найти скрипт, вы также увидите 404 запросов GET в консоли (используйте Ctrl + Shift + I в Chrome). Если вы не видите 404 GET, то отсутствующий скрипт, вероятно, не будет выпущен.

Указанная вами ошибка обычно означает, что один или несколько сценариев имеют некоторую синтаксическую ошибку, которая не загружается с помощью интерпретатора JavaScript. То есть, requirejs действительно нашел скрипт, но когда он попытался загрузить его, он потерпел неудачу из-за проблем компиляции или выполнения.

Лучший способ узнать сценарий преступника - запустить инструменты разработчика, такие как доступные в Chrome, и увидеть исключение и значения, установленные в исключении, и любые переменные вокруг него. Если вы его не видите, включите ошибки перерыва (см. JavaScript: Is there a way to get Chrome to break on all errors?). Это приведет к тому, что отладчик Chrome разорвется, как только произойдет ошибка. Если ошибка не является ошибкой скрипта, продолжайте, пока вы не остановитесь при превышении ошибки.

Вообще, когда я получаю выше ошибки, я просто смотрю на последний код я типизированных и я обычно нахожу ошибку синтаксиса (BTW, я настоятельно рекомендую "use strict"; и JSLint обнаружить это еще быстрее.

+0

Спасибо за это. Я упрощу свою прокладку и попробуй.Я понимаю, что вы имеете в виду около 404 ошибок. Дело в том, что RequireJS ищет эти файлы в 'js/pickadate.js' (где скрипт фактически находится в' js/vendor/pickadate/picker.min.js') – Leon

1

Вы должны . решили это сейчас, но и для других людей, которые приходят сюда, проблема ваши пути Попробуйте использовать относительные пути вместо этого, я была такая же проблема, и установил ее для меня что-то вроде этого:.

paths: { 
    jquery:  '../vendor/jquery/jquery-2.0.3.min', 
    pickadate:  '../vendor/pickadate/picker.min', 
    pickadatedate: '../vendor/pickadate/picker.date.min' 
}, 
Смежные вопросы