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' из неопределенного