RequireJS и текстовый плагин Время загрузки модулей

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

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

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

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

Ответы

Ответ 1

Я предполагаю, что это путь. У меня такая же настройка (node/express и позвоночник), и, похоже, она работает для меня. Вот мой файл 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;
});

Ответ 2

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

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

doc: http://requirejs.org/docs/api.html#config-waitSeconds

Ответ 3

Мой первоначальный ответ

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

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

waitSeconds

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

<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> 

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

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

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

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

Ответ 4

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

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

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

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

Поэтому, если вы укажете массив зависимостей, вы также не можете зависеть от синтаксиса сахара. По-моему, это не идеальное, а то, как было создано приложение requirejs.

Ответ 5

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

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

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