RequireJS не следует относительному пути для data-main с набором baseUrl
используя requireJS, я пытаюсь указать путь для моего data-main, который отличается от baseUrl. Кажется, что requireJS игнорирует все, что я печатаю перед именем файла, и всегда ищет файл в папке baseUrl.
у меня есть следующая структура папок:
index.html
scripts/
lib/
require.js
test/
main2.js
config.js
содержимое индекса.HTML-код :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
<script data-main="test/main2" src="scripts/lib/require.js"></script>
<script src="scripts/config.js"></script>
</head>
<body></body>
</html>
содержимое конфига.js:
requirejs.config({
baseUrl: "scripts"
});
и я получаю ошибку 404 для: GET [...]/скрипты/main2.Яш , даже хотя он должен искать [...]/скрипты/тест/main2.js. Если я удалю конфигурацию.JS-файл и использовать data-main= "scripts/test / main2" он работает, но я хотел бы иметь возможность указать baseUrl для моего проекта.
какие идеи ?
Edit: после ответа Waxen:
- даже если я использую "скрипты / тест / main2", "/скрипты/тест/main2" или "whateverIWant/main2" в моих данных-main, он странно всегда ищет " скрипты/main2.js"
Примечание. что я использую requirejs 2.1.8
2 ответов
это не работает так, как вы хотите, потому что вы вызываете require с data-main перед установкой baseURL. Я не уверен, почему он пытается перейти к scripts / main2.JS, хотя; я ожидал бы, что он попытается загрузить test/main2.js, а не Скрипты/main2.js. Однако это к делу не относится.
что вам нужно сделать, это убедиться, что ваш baseURL доступен, прежде чем он попытается загрузить вас data-main. Это может быть достигнуто путем включения вашей конфигурации первый и, используя синтаксис из второй пример: http://requirejs.org/docs/api.html#config.
содержимое индекса.HTML-код :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
<script src="scripts/config.js"></script>
<script data-main="test/main2" src="scripts/lib/require.js"></script>
</head>
<body></body>
</html>
содержимое конфига.js:
var require = {
baseUrl: "scripts"
};
Я прочитал этот поток и не мог понять, почему использование атрибута data-main для указания файла конфигурации js не будет таким же, как указание конфигурации перед загрузкой, как предполагает ответ на этот поток.
в моих экспериментах я узнал, что установка значений с помощью файла JS конфигурации data-main может работа (тогда, опять же, это не может быть). Для новичков требуют и Амдс и asynchronisity в общем, "может сработать" понятие имеет отношение к с тем, что асинхронные операции выполняются тогда, когда могу ... и не в предсказуемом порядке.
установив это, есть очень важный момент, сделанный в текущей версии документации RequireJS, которая ускользала от меня до сих пор:
вы также можете позвонить require.config из ваших данных-основная точка входа, но имейте в виду, что сценарий data-main загружается асинхронно. Избегать другие скрипты точки входа, которые ошибочно предполагают, что data-main и его требовать.конфиг всегда будет выполняться до загрузки скрипта.
дополнительная информация: http://requirejs.org/docs/api.html#data-main
будучи новым для RequireJS, я был слегка потрясен, узнав это,и я потратил много времени, пытаясь отладить проблемы с доступом к пути. На этом этапе мне непонятно, почему кто-то будет использовать data-main (особенно для определения baseUrl), так как эта ссылка будет работать только случайным образом. Вместо решения предложенный этим потоком (в котором вы устанавливаете baseUrl в теге сценария, который не является асинхронным, будет работать, как ожидалось, и надежно установит конфигурацию RequireJS перед запуском RequireJS.