Ответ 1
Кажется, у вас есть другая точка входа в ваше приложение где-то, кроме основного script (js/main.js). Даже если это последующий script на той же странице, вы не можете зависеть от того, что ваш основной файл данных script будет выполнен до следующего запуска script, поскольку он загружен атрибутом async.
<script data-main="js/main" src="js/lib/require.js"></script>
<!-- foo.js might run before js/main.js !!! -->
<script src="js/foo.js"></script>
Вы можете это доказать, добавив инструкцию console.log в конце js/main.js и один в foo.js(или что-то еще). Обычно вы увидите один из js/main.js, а затем foo.js, но в этом 1 из 50 случаев вы увидите, что они происходят в другом порядке.
Существует несколько стратегий:
1 - выполните все инициирование вашего приложения и последующее требование от основной информации script
Применяется к одностраничным приложениям, конечно. Все в одном файле:
require.config({
// snip
});
require(['mymodule'], function( mymodule ) {
// do stuff
});
2 - используйте встроенный script сразу после тега require.js script
Вместо того, чтобы иметь вышеуказанный script внутри отдельного файла, на который ссылается основная информация, просто введите 2 script тег прямо ниже. Это первый пример указанный в документах.
Используется в основном для одностраничных приложений
3 - Загрузите требуемый config в глобальную переменную до тега require.js script
Второй пример указанный в документах.
<script>
var require = {
paths: { // define them}
shim: { // define them }
};
</script>
<script src="scripts/require.js"></script>
Используется в основном для одностраничных приложений
4 - Настройте ваши вызовы, чтобы сначала загрузить конфигурацию
Это лучше всего подходит для многостраничных приложений и рекомендовано в пример приложения с несколькими страницами
<script src="js/lib/require.js"></script>
<script>
//Load common code that includes config, then load the app
//logic for this page. Do the require calls here instead of
//a separate file so after a build there are only 2 HTTP
//requests instead of three.
require(['./js/common'], function (common) {
//js/common sets the baseUrl to be js/ so
//can just ask for 'app/main1' here instead
//of 'js/app/main1'
require(['app/main1']);
});
</script>