Подтвердить что ты не робот

Требование - управление версиями

Быстрое примечание - путем управления версиями я имею в виду для целей перебора кеша. Обычная практика добавления параметров запроса в конец запроса script не работает во всех браузерах. Самый простой и самый грязный способ, который я нашел на сегодняшний день, - это версия всего моего имени папки развертывания.

-- scripts.v1
-- scripts.v2

Но это невероятно беспорядочно и mucks вверх время развертывания слишком (я использую S3 как мой cdn). Кто-нибудь знает об альтернативном методе?

ИЗМЕНИТЬ

Кажется, я не был очень ясен. Позвольте мне быть более явным.

Я использую requirejs на своем сайте. Это довольно тяжелое приложение JavaScript с частыми обновлениями и итерациями. Теперь с помощью requirejs, единственный способ, которым я могу надежно удостовериться, что браузеры обслуживают последнюю версию, - это версия моего всего имени папки развертывания (javascript) и снова загружать всю партию файлов на S3. Затем я использую метод data-main для установки базового пути проекта.

По многим причинам это довольно громоздко. Даже если изменение кода всего несколько строк, весь процесс необходимо повторить. Есть ли какой-нибудь другой достойный метод, позволяющий requirejs знать, что файлы имеют версии? Как и в случае, если я вызываю

require(["superImportantJSFile"], function(){})

он будет знать, что текущая версия superImportantJSFile.v4.js или что-то в этих строках.

Надеюсь, теперь я был более ясен. Какие-либо предложения относительно того, как сообщество в целом это делает? Я уверен, что это должен быть общий сценарий, но я не смог найти хорошее решение для этого еще

4b9b3361

Ответ 1

HTML5 Boilerplate предлагает одно из самых изящных решений, которые я видел. У них есть конфиги, доступные для Apache и nginx, Оттуда вы можете добавить временную метку к имени файла в тегах script, например:

<script src="scripts/app.20130728.js"></script>

Какой веб-сервер будет переписываться на scripts/app.js.

Ответ 2

Вы можете добавить псевдонимы в свою конфигурацию RequireJS, используя map (см. http://requirejs.org/docs/api.html#config-map):

require.config({ /* ... other config.... */
     map: { '*': {'superImportantJSFile': 'superImportantJSFile.v4'} }
})

Итак, у вас есть только одно место для обновления:)

Вы упоминали об использовании CDN, который является хорошим прецедентом, чтобы не помещать эти файлы в свернутый пакет r.js (в случае, если вы используете этот инструмент). Но если эти файлы часто обновляются, возможно, имеет смысл упаковать ваши модули с помощью r.js и обновить весь код.

Ответ 3

Мне нравится использовать шаг пост-сборки, который ставит статические ресурсы в папку с путём, который включает номер версии управления версиями. Например, номер версии 1234 управления версиями приведет к созданию пути:/1234/scripts/*. Эти каталоги также создаются в CDN с правильной версией активов внутри.

В нашей конфигурации require.js в шаблоне мы заменяем baseURL соответствующей ревизией, которая управляется через файл конфигурации, например:

var require = {
    baseUrl: "%%resDir%%",
    ...
};

Это упрощает изменение версий активов между несколькими разными версиями, которые могут оставаться на CDN без каких-либо конфликтов. Он также решает проблему сбоя кэша браузера.