Require.js ошибка случайная Не удалось загрузить ресурс

Мое приложение использует require.js, у меня случайная ошибка (случается 1 раз за 50 перезагрузок) Require.js пишите в консоли:

Не удалось загрузить ресурс: сервер ответил с состоянием 404 (не найдено)

Действительно, require.js пытается включить jquery из неправильного каталога ... Я нене знаю почему, в большинстве случаев приложение работает нормально ...

Мой конфиг довольно прост:

require.config({
  shim: {
    underscore: {
      exports: '_'
    },
    backbone: {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    },
    animate_from_to: {
      deps: ['jquery']
    },
    bootstrap: {
      deps: ['jquery']
    },
    zoom: {
      deps: ['jquery']
    },
    shop_util: {
      deps: ['jquery']
    },
    pricer: {
      deps: ['jquery']
    },
    filter: {
      deps: ['jquery']
    },
    paginator: {
      deps: ['jquery']
    },
  },
  paths: {
    bootstrap:        'lib/bootstrap',
    jquery:           'lib/jquery-1.9.1',
    zoom:             'lib/jquery.zoom.min',
    animate_from_to:  'lib/jquery.animate_from_to-1.0.min',
    backbone:         'lib/backbone.min',
    underscore:       'lib/underscore.min',
    text:             'lib/require-text',
    shop_util:  'lib/shop_util',
    pricer:           'lib/pricer',
    filter:           'lib/filter',
    paginator:        'lib/paginator',
  }

});

Спасибо

 landons10 июн. 2013 г., 16:26
Интересно. Вы испытываете одинаковое поведение в нескольких браузерах?
 landons10 июн. 2013 г., 16:19
Какой каталог он пытается загрузить?
 Thomas K10 июн. 2013 г., 16:24
Он пытается загрузить из каталогаrequire.config» файл. /js/jquery.js вместо /js/lib/jquery.1-9-1.js
 Thomas K11 июн. 2013 г., 08:08
require.config находится в файле 'main.js' вызывается по сценарию: <скрипт data-main = "JS / главный» SRC =»JS / Lib / require.js "> </ Скрипт>
 Thomas K10 июн. 2013 г., 16:28
Я нене знаю, я использую Chrome, и ошибка настолько необычна, что я могувоспроизвести это

Ответы на вопрос(1)

Решение Вопроса

Кажется, у вас есть другая точка входа в ваше приложение, отличное от основного сценария данных (js / main.js). Даже если этоЕсли последующий сценарий находится на той же странице, вы не можете зависеть от того, будет ли завершен основной сценарий данных до запуска следующего сценария,с тех пор'загружается с асинхронным атрибутом.




Вы можете доказать это, добавив оператор console.log в конце js / main.js и один в foo.js (или любой другой). Обычно вы увидите один из js / main.js, а затем foo.js, но в этом случае 1 из 50 вы 'увидим их в другом порядке.

Есть несколько стратегий, чтобы справиться с этим:

1 - Все ли инициация вашего приложения и последующие требуютs из вашего основного сценария данных

Разумеется, относится к одностраничным приложениям. Все в одном файле:

require.config({
  // snip
});
require(['mymodule'], function( mymodule ) {
  // do stuff
});

2 - Используйте встроенный скрипт сразу после тега сценария require.js

Вместо того, чтобы вышеупомянутый скрипт находился внутри отдельного файла, на который ссылается data-main, просто поместите второй тег скрипта прямо внизу. Это первый примерперечислены в документах.

Применяется в основном для одностраничных приложений

3 - Загрузите ваш config конфигурации в глобальную переменную перед тегом сценария require.js

Второй примерперечислены в документах.


    var require = {
        paths: { // define them}
        shim: { // define them }
    };


Применяется в основном для одностраничных приложений

4 - Вложите ваши требуемые вызовы, чтобы загрузить конфиг первым

Это лучше всего подходит для многостраничных приложений и рекомендуется впример многостраничного приложения-прокладки



    //Load common code that includes config, then load the app
    //logic for this page. Do the require calls here instead of
    //a separate file so after a build there are only 2 HTTP
    //requests instead of three.
    require(['./js/common'], function (common) {
        //js/common sets the baseUrl to be js/ so
        //can just ask for 'app/main1' here instead
        //of 'js/app/main1'
        require(['app/main1']);
    });

Смежные вопросыВот,Вот, а такжеВот

 Yuck26 нояб. 2013 г., 00:33
Isn»t require.js должен делать это в любом случае, в зависимости от порядка файлов в аргументе массива?
 explunit26 нояб. 2013 г., 02:51
@ Тьфу нетнет. Тот'Асинхронная часть AMD - вы неНе знаю, в каком порядке будут разрешены файлы, только то, что они разрешаются перед вызовом вашей функции.
 Vivin Paliath05 авг. 2014 г., 05:14
Спасибо! Эта проблема беспокоила меня в течение долгого времени!
 Thomas K12 июн. 2013 г., 08:36
Совершенно верно! Я выбрал 4-й метод, самый "совместим с require.js " по мне. Спасибо !

Ваш ответ на вопрос