То, что вы делаете , не может работать надежно , потому что вы загружаете конфигурацию RequireJS асинхронно и , у вас есть синхронный код, который зависит от этой конфигурации.
Вот что происходит:
вызывает загрузку RequireJS и вызывает требование RequireJS для планирования асинхронной загрузки для вашего /js/shop2/springen/app
. Атрибут async
этого элемента также делает его так, что браузер имеет право загружать RequireJS асинхронно. Если он загружает RequireJS асинхронно, это связывает проблему, с которой вы столкнулись, поскольку к моменту запуска вашего другого элемента
не сообщается, загружается ли RequireJS. Он может загружаться или не загружаться в зависимости от множества внешних факторов. Это сводится к удаче. Однако удаление этого не является целым решением, потому что запрошенный вами модуль через data-main
загружен еще асинхронно, независимо от того, что.
не указано, загружен ли ваш основной модуль или нет, потому что (см. Выше) он загружается асинхронно. Поэтому RequireJS действительно может быть загружен , но он, возможно, еще не настроен , потому что ваша конфигурация находится в модуле, который может быть загружен или не может быть загружен к тому моменту, когда этот скрипт запустить. Вот почему typeof require
будет функцией, но вы получите ошибки, пытаясь загрузить модули, зависящие от вашей конфигурации. $(document).ready
не помогает, потому что событие, которое вызывает $(document).ready
, может произойти до того, как RequireJS загрузил основной модуль. Если вы не можете поместить код require(['Search']...
в свой основной модуль , что вы можете сделать, это удалить вызов requirejs.config
из /js/shop2/springen/app
, а затем добавить элемент непосредственно перед тем, который загружает RequireJS, который делает:
require = {
baseUrl: '/js/shop2/springen/',
paths: {
'lodash': 'vendor/lodash.min',
...
}
});
Установка параметра require
variable до конфигурации перед загрузкой RequireJS говорит RequireJS использовать значение этой переменной в качестве своей конфигурации.
И не забудьте удалить этот атрибут async
из который загружает RequireJS.