2013-04-24 3 views
2

Я работал над проектом, который имеет больше интерфейсных скриптов, чем я привык, и я решил использовать RequireJS для его организации. После того, как вы всю ночь брызгали, у меня все еще возникают проблемы, когда определенные зависимости, похоже, загружаются после этого факта.RequireJS, Shim, зависимости не загружаются должным образом

Например, Sammy нуждается в jQuery для работы. Обновление моего приложения приводит к ошибке «Sammy, function undefined». Выполняется ли функция Require перед загрузкой jQuery?

Требовать конфигурации:

require.config({ 
     paths: { 
      'jquery': 'vendor/jquery.2.min', 
      'sammy': 'vendor/sammy', 
     }, 
     shim: { 
      'jquery': { 
       debs: [], 
       exports: '$' 
      }, 
      'sammy': { 
       debs: ['jquery'], 
       exports: 'Sammy' 
      } 
      ... 

Что касается моей навигации:

define([ 
    'jquery', 
    'sammy' 
], function($, Sammy) { 

    return Sammy(function() { 
    ... 

Примерно 10 процентов моих тестов, при ударе о функции Сэой, приложение poops с следующим:

Uncaught ReferenceError: jQuery is not defined sammy.js:2120 
Uncaught TypeError: undefined is not a function 

Способ работы RequireJS мистифицирует меня. Что мне не хватает?

+5

Является ли 'debs: ['jquery']' опечаткой? Должно быть 'deps' http://requirejs.org/docs/api.html#config – jgillich

+1

Вы также можете использовать require-jquery.js, в который включен jQuery, и всегда будет загружать его перед чем-либо еще: http: // requirejs.org/docs/jquery.html – jgillich

+2

«организованный» не был опечаткой. Оставьте en_GB в покое! ;) –

ответ

10

У вас есть опечатка в вашей конфигурации, правильное имя свойства будет deps вместо debs, как указано в documentation.

'jquery': { 
    deps: [], 
    exports: '$' 
}, 
'sammy': { 
    deps: ['jquery'], 
    exports: 'Sammy' 
} 
+1

Ну, это новый минимум ... побежден опечаткой. Спасибо чувак. – Jorg

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