Обновление ссылок на JavaScript после свертывания в процессе сборки
Каковы наилучшие способы обновления ссылок javascript после их минимизации (я использую YUI Compressor)?
Я использую ASP.NET MVC и имею кучу или ссылки JavaScript в каждом файле во время разработки. Во время сборки (используя MSBuild) я минимизирую все файлы в один файл. В то же время я хочу заменить все ссылки на одну ссылку. Это должно быть довольно распространенным явлением, и все же я не могу найти хороший чистый автоматизированный способ сделать это.
У кого-нибудь есть идеи? Спасибо
2 ответа
Мы используем собственный менеджер скриптов. В нашем процессе msbuild YUI Compressor используется для создания минимизированных версий, а также для объединения нескольких небольших файлов.js в один больший. Это уменьшает количество запросов и, следовательно, время загрузки. Минимизированные и комбинированные версии создаются параллельно с отлаживаемыми версиями.
Во время выполнения скрипт-менеджер вызывается элементами управления для регистрации определенных скриптов, на которые ссылается их не минимизированное имя. Затем диспетчер сценариев просто включит эти сценарии в режиме отладки (хотя мы выполняем трюк, включающий сценарии в HEAD, а не тело, как это делает ClientScriptManager). В режиме RELEASE менеджер сценариев заменит определенные сценарии, известные ему, их уменьшенными аналогами. В случае сценариев, которые объединены в один файл, менеджер вызывается несколько раз, каждый раз регистрируя один и тот же объединенный минимизированный файл. Некоторые файлы размещаются извне: это также обрабатывается менеджером сценариев.
Недостатки:
- знание о том, какие файлы минимизированы, дублируется: и скрипт-менеджер, и скрипт сборки должны быть синхронизированы.
- Когда добавляются новые скрипты, они не будут автоматически минимизированы (лично я считаю это хорошим моментом; я хочу, чтобы минификация была выбором)
Кстати, мы не используем порт C# для запуска в MSBuild. Было слишком много ошибок, когда я впервые попробовал. Мы просто вызываем YUI Compressor с задачей Exec.
На ум приходит пара идей:
1) Воспользуйтесь выпущенным исправлением, чтобы разрешить версии отладочных /intellisense файлов.js: KB958502
Это позволит вам написать (хотя и один) большой, полностью читаемый файл js, но обратитесь к полной версии вашего скрипта src, которая может быть сгенерирована во время сборки. Hofix позволяет VS находить файлы с именами "-vsdoc.js" или ".debug.js" вместо файлов, на которые есть ссылки (поэтому вы ссылаетесь на "/scripts/myscript.js" в атрибуте src, но сначала IDE будет выглядеть для "/scripts/myscript-vsdoc.js", затем "/scripts/myscript.debug.js", и, наконец, он будет искать "/scripts/myscript.js" - немного больше информации можно найти в Visual Web Блог команды разработчиков.
2) Другие разместили на них написанные менеджеры пользовательских скриптов, которые будут ссылаться на основную версию во время отладки, но в режиме выпуска будет запрашиваться свернутая версия.
3) Я уверен, что где-то читал, хотя пока не могу найти его о ком-то, кто написал свой собственный метод расширения HTML-помощника, который генерировал бы вызов сценария соответствующим образом в зависимости от режима buid - процесс, аналогичный Рику идея, но позволяющая вам работать более "обычным" образом, хотя я не уверен, насколько хорошо он играл с intellisense.
Сейчас я склоняюсь к 1 - используя процесс, подобный тому, который здесь сделал Ник Берарди: Как создать YUI Compressor MSBuild Task для генерации минимизированного js.