Ответ 1
Как вы определяете свой require.config? Я думаю, что для его вступления в силу до того, как вы импортируете require.js, вам нужно закодировать его следующим образом:
<script type="text/javascript">
var require = {
baseUrl: "/scripts/",
waitSeconds: 15,
urlArgs : "bust="+new Date().getTime()
};
</script>
<script data-main="app/main" src="/scripts/require.js"></script>
В частности, перед импортом require.js должен быть создан объект с именем "require".
UPDATE
Как отмечает Джесси в комментариях ниже, есть несколько улучшений, которые вы должны применить к вашему запросу {} для использования в целях производства. Вышеприведенный пример изложено из документации RequireJS и как можно меньше изменен, чтобы ответить на этот вопрос.
Вот несколько вещей, которые следует учитывать при производстве:
- Вместо того, чтобы использовать текущую дату-время в качестве переменной кэширования, вы должны использовать номер сборки из своей среды разработки. Это позволяет вашим клиентам кэшировать Javascript между версиями, но заставит их обновлять свой кеш при каждом обновлении программного обеспечения.
- Джесси также использует функцию {} для определения зависимостей вместо использования основного атрибута данных script. Я не знаю, если это строго лучше, но я думаю, что это более чистый вид.
- Настройте waitSeconds на основе ваших потребностей. Я использовал значение примера из документации RequireJS, но вы должны скорректировать значение или опустить его в зависимости от ваших потребностей.
Итак, если вы применяете эти методы, ваш код может выглядеть так:
<script type="text/javascript">
var require = {
baseUrl: "/scripts/",
waitSeconds: 15,
urlArgs : "bust="+{{buildNumber}},
deps : ['app/main']
};
</script>
<script src="/scripts/require.js?bust={{buildNumber}}"></script>
Обратите внимание, что в этом случае {{buildNumber}} является значением, предоставленным сервером.
ОБНОВЛЕНИЕ 2
Решение проблемы с распаковкой urlArgs имеет проблемы. К сожалению, вы не можете контролировать все прокси-серверы, которые могут находиться между вами и вашим веб-браузером. К сожалению, некоторые из этих прокси-серверов, к сожалению, настроены на игнорирование параметров URL при кешировании файлов. Если это произойдет, неправильная версия вашего JS файла будет доставлена вашему пользователю.
Я бы рекомендовал использовать buildNumber
в вашем запросе имени файла Javascript, например buildNumber.myModule.js
(префикс) или myModule.buildNumber.js(postfix). Вы можете использовать стиль префикса, изменив baseUrl:
baseUrl: "/scripts/buildNumber",
Обратите внимание на отсутствие "/" в конце baseUrl.
Вам нужно будет использовать модифицированную версию require.js для использования решения postfix. Подробнее об этом можно узнать здесь: fooobar.com/questions/25574/...
Очевидно, что в любом случае вы захотите использовать какое-то решение для замены buildNumber
с некоторым типом номера версии, который изменяется с каждой версией.