RequireJS: поиск script, ответственный за ошибку

Я ищу элегантный способ узнать полный путь к script, который вызвал ошибку тайм-аута (т.е. не удалось загрузить зависимость).

requirejs.onError = function (err) {

   // this works:
   var script_that_failed_loading = err.originalError.target.src

   // now I want:
   var the_script_responsible_for_this = <???>

};

Ответы

Ответ 1

Использовать обратные ошибки уровня загрузчика

require(["foo","bar"],function(foo,bar){
  // perform some action
},function(error){
  // handle error here
});

Обратите внимание, что имя отказавшего модуля указано в error.requireModules. Такие ошибки могут использоваться как для загрузчиков, так и для модулей. Если у вас несколько резервных путей для ресурса, используйте резервные копии пути.

По моему личному опыту, я смиренно не согласен с ddotsenko. Мы используем RequireJS в нашей производственной среде. Если настройка правильная, RJS очень надежна.

Ответ 2

RequireJS выбрал несколько ненадежный, отключенный механизм для обнаружения ошибок. Он использует таймер, чтобы узнать, что он ожидал получить. Некоторые другие загрузчики AMD используют другие, более прямые механизмы для обнаружения ошибок при загрузке.

Мой предпочтительный загрузчик AMD - CurlJS, который является жестким, чтобы уловить ошибки загрузки/разбора.

Из-за архитектурного выбора он более надежно обнаруживает условия ошибки, и вы можете прикреплять обработчики ошибок непосредственно к каждому вызову require. Если для вас важны такие вещи, как уловка ошибок, я настоятельно рекомендую взглянуть на CurlJS.