RequireJS и текстовый плагин Время ожидания загрузки для модулей - PullRequest
15 голосов
/ 21 декабря 2011

У меня возникли проблемы с работой текстового плагина RequireJS.Возможно, это проблема, связанная с путем (или что-то аналогичное очевидное), но я не могу ее решить, потому что ни консоль chrome (с включенным xhr), ни firebug не дают мне никакой информации, кроме

Uncaught Error: Load timeout for modules: text 
http://requirejs.org/docs/errors.html#timeout

IЯ вполне уверен, что пути в порядке, но я не могу найти другого объяснения.Кто-нибудь есть идеи, как отладить это?

Я использую node.js и экспресс на стороне сервера и магистрали и JQuery на стороне клиента.Все они загружаются правильно с RequireJS.

Ответы [ 5 ]

4 голосов
/ 03 января 2012

Я предполагаю, что это проблема пути. У меня такая же настройка (узел / экспресс и магистраль), и, кажется, она работает для меня. Вот мой файл main.js:

require.config({
  paths: {
    jquery: 'libs/jquery-1.7.1.min',
    underscore: 'libs/underscore',
    backbone: 'libs/backbone',
    text: 'libs/text',
    templates: '../views',
    persist: 'libs/persist/persist'
  }
});
require([
  'app'
], function(App){
  App.initialize();
});

и вот как я вызываю плагин из модуля:

define([
  'jquery',
  'underscore',
  'backbone',
  'collections/sub_elements',
  'collections/elements',
  'views/element',
  'text!../../../views/partials/_elements.html'
], function($, _, Backbone, sub_elementsCollection, collection, view,     template){

  var elementsView = Backbone.View.extend({
    // ... //
  });

  return elementsView;
});
1 голос
/ 23 января 2014

Мой оригинальный ответ

Я ответил на аналогичный вопрос здесь , указывая на официальные страницы require.js для устранения неполадок .

В моем случае эта ошибка возникала только тогда, когда консоль разработчика была открыта в Chrome для нескольких версий Chrome на одном MacBook. Другие устройства не показали проблему. Из-за этого я был в порядке, изменив конфигурацию на этом компьютере

waitSeconds

Опция waitSeconds может быть сконфигурирована как бесконечное (0) или любое другое значение (в секундах). Значение по умолчанию составляет 7 секунд. Пример конфигурации:

<script src="scripts/require.js"></script>
<script>
  require.config({
    baseUrl: "/another/path",
    paths: {
      "some": "some/v1.0"
    },
    waitSeconds: 0
  });
  require( ["some/module", "my/module", "a.js", "b.js"],
    function(someModule,    myModule) {
      //This function will be called when all the dependencies
      //listed above are loaded. Note that this function could
      //be called before the page is loaded.
      //This callback is optional.
    }
  );
</script> 

Так как infinite (0) отключает тайм-аут, я бы не рекомендовал эту опцию для производственного кода! Если вы столкнулись с этой проблемой, запуск кода где-либо или отключение тайм-аута не помогает, тогда продолжайте чтение.

3 распространенных причины этой проблемы

  • ошибки в загружаемых вами модулях
  • неверные пути в конфигурации (отметьте опции paths и baseUrl)
  • двойная запись в конфигурации

Подробнее об этой теме смотрите в оригинальном ответе, указанном сверху.

1 голос
/ 06 ноября 2012

Как и на вашем телефоне с Windows, попробуйте установить «waitSeconds» на большее число.

Мобильные устройства работают медленно, но по умолчанию значение require.js истекает через 7 секунд, что часто является низким для мобильных пользователей или пользователей с медленным доступом в Интернет.

Документ: http://requirejs.org/docs/api.html#config-waitSeconds

0 голосов
/ 06 июня 2019

Require.js сделал запрос на мой text.js файл, но ответ был 302 - мой пользователь не прошел аутентификацию. Поэтому плагин text не может быть загружен. Поэтому все мои текстовые ресурсы не удалось загрузить: text!any/name.html.

Моя консоль выдала мне связанное сообщение, еще один намек на то, что мой плагин text не мог загрузить:

Невозможно прочитать свойство 'normalize' из неопределенного

0 голосов
/ 30 августа 2013

Я получил эту ошибку, когда неправильно использовал синтаксис sugar .Вы не можете одновременно определять зависимости и использовать фабричную функцию require.

//THIS WILL FAIL
define(['require'], function (require) {
    var namedModule = require('name');
});

Из документации :

Это не удается, так как requirejs долженОбязательно загрузите и выполните все зависимости перед вызовом фабричной функции выше.Если для define () указан массив зависимостей, то requirejs предполагает, что в этом массиве перечислены все зависимости, и не будет проверять заводскую функцию на наличие других зависимостей.Таким образом, либо не передавайте массив зависимостей, либо, если используете массив зависимостей, перечислите в нем все зависимости.

Так что, если вы укажете массив зависимостей, вы также не сможете зависеть отсахарный синтаксис для работы.На мой взгляд, не идеал, но именно так был создан requirejs для работы.

...