Минимизация скриптов и непрерывная интеграция с MSBuild - PullRequest
18 голосов
/ 10 ноября 2008

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

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

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

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

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

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

Ответы [ 3 ]

24 голосов
/ 10 ноября 2008

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

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

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

4 голосов
/ 09 января 2009

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

http://www.codeplex.com/YUICompressor

Это порт .NET для java Yahoo! компрессор .

1 голос
/ 05 апреля 2013

Не идеальный ответ, но если вы используете 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

...