Минификация скриптов и непрерывная интеграция с MSBuild

В недавнем проекте, над которым я работал на C# / ASP.NET, у меня есть несколько довольно сложных файлов JavaScript и несколько отличных таблиц стилей. Поскольку эти ресурсы сценария увеличиваются в размере, он желательно минимизировать ресурсы и, конечно же, сохраняет ваши веб-страницы как можно более легкими. Я знаю многих разработчиков, которые вручную загружают свои ресурсы JavaScript в компрессоры после отладки, а затем развертывают свои приложения.

Когда дело доходит до контроля версий и автоматизированных сборок в удовлетворительном мире непрерывной интеграции (спасибо CruiseControl.NET); ручное сжатие просто не годится. Единственный способ сохранить контроль версий и предложить сжатые ресурсы - это сохранить исходный код JS / CSS и их миниатюрные собратья в отдельной структуре каталогов. Затем зарегистрируйте только один набор ресурсов или другой в коде программной части. Однако, если разработчик вносит изменения в исходный код JS / CSS, а затем не может повторно сжать его и проверить обе версии, то ваша строка кода теперь не синхронизирована. Не говоря уже об неэлегантности.

Я думаю, что было бы неплохо написать собственный исполняемый файл (если он еще не существует) для блока задач CC.NET, который будет находить и сжимать все ресурсы JavaScript и CSS в целевом каталоге после действия сборки, но до asp .net опубликовать в целевой. Таким образом, разработчики будут работать только с исходным кодом JS и CSS, а пользователи получат только минимизированные ресурсы.

Есть ли приложение, которое уже выполняет эту задачу, и если нет, то какие ресурсы мне следует установить на сервере сборки, чтобы запустить CC.NET?

(ближайший вопрос, который я мог найти здесь, требует NAnt, в моем случае это не вариант.)

Обновлено: У Дэйва Уорда теперь есть отличная статья о как автоматически минимизировать в Visual Studio на его сайте.

под minify, я думаю, вы имеете в виду минимизировать ...

Mitch Wheat 09.01.2009 09:11

Нет. Я имел в виду minify (en.wikipedia.org/wiki/Minify), но я думаю, что это 12 из одного или дюжина другого. Я считаю, что эти два термина взаимозаменяемы.

Ian Patrick Hughes 23.05.2009 03:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
18
2
8 621
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Проект MSBuildCommunityTasks имеет несколько задач MSBuild, которые могут выполнять то, что вы ищете, включая Merge и JSCompress.

Вы можете добавить их в свой проект MSBuild в целевом объекте AfterBuild, чтобы проект мог выполнять это действие каждый раз при построении проекта, и ничто не могло рассинхронизироваться. После этого ваше веб-приложение может ссылаться на сжатую версию для запуска, но разработчики будут редактировать полные версии.

На сервере ничего больше не потребуется, кроме сборки задач сообщества MSBuild. Вы можете поместить эту сборку в свое собственное дерево исходного кода и ссылаться оттуда, и ваша сборка CI должна получить эту сборку и все, что ей нужно при сборке.

Хех, удивительно, что я собираюсь поместить это в StackOverflow сегодня вечером, и поиск в Google обнаружил наш сайт! ПУТЬ, ТАК! И хороший ответ, Тодд +1

Jarrod Dixon 09.01.2009 08:16

Я должен добавить, что проект сообщества msbuild tasks - звездный. Я использую jscompress в наших процессах сборки. Обратите внимание, что вы не должны подвергать сжатию файл jquery.min, так как он будет подавлен.

BozoJoe 07.05.2009 21:28

К вашему сведению: проект MSBuildTasks перемещен на GitHub: github.com/loresoft/msbuildtasks

Steve J 22.08.2012 17:09

Еще одна библиотека сжатия JS (и CSS!) Для MSBuild:

http://www.codeplex.com/YUICompressor

Это порт .NET для Yahoo! компрессор на основе Java.

Хорошая находка, Джаррод. Я собираюсь рассмотреть автоматический минификатор CSS, который также можно будет включить в автоматические сборки. Это была хорошая находка.

Ian Patrick Hughes 23.05.2009 03:45

Джаррод, можете ли вы еще раз взглянуть на порт .NET YUICompressor (ссылка выше). Вчера выпал новый релиз. В прошлый раз вы, ребята, сказали в подкасте SO, у вас были проблемы с этим. Хотелось бы увидеть, работает ли эта сборка с вашим графиком развертывания ... а если нет, напишите, почему / что и т. д. :)

Pure.Krome 07.07.2009 05:39

Не лучший ответ, но если вы используете MVC4, они встроили это как новую функцию. При запуске конфигурации отладки он выводит отдельные файлы с комментариями и т. д., Но когда вы переключаетесь на выпуск, он автоматически объединяет, минимизирует и изменяет ссылки страниц на минимизированные файлы. Вы можете настроить отдельные пакеты, скажем, для jquery и ваших собственных js. Это работает с файлами CSS и JS.

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

Если MVC4 вам не подходит, вы также можете найти в Nuget пакеты, которые могут помочь, например:

https://www.nuget.org/packages?q=minify

Да, сейчас вариантов больше, чем когда этот вопрос был опубликован в 2008 году.

Ian Patrick Hughes 03.06.2013 03:37

Другие вопросы по теме