- PVSM.RU - https://www.pvsm.ru -

Бандл… Пара-пара-па хэй! или Bundle Transformer шагает по планете 2

Упоминания о Bundle Transformer в Интернете [1]

Я немного отойду от формата предыдущей статьи [2] и прежде чем привести подборку интересных упоминаний о Bundle Transformer [3], я расскажу об изменениях, которые произошли в проекте за последние полгода.

До августа прошлого года библиотека dotless [4] была основным средством для работы с LESS в сообществе .NET-разработчиком, и входила в состав практически всех инструментов клиентской оптимизации для ASP.NET: Cassette [5], SquishIt [6], Combres [7] и RequestReduce [8]. Bundle Transformer также не являлся исключением: библиотеки dotless и DotlessClientOnly (облегченная версия) использовались в модулях BundleTransformer.Less [9] и BundleTransformer.LessLite.

Ситуация в корне изменилась, когда вышел Twitter Bootstrap 3.0 [10]. Исходники таблиц стилей Bootstrap 3.0 были написаны на LESS 1.4.X, а библиотека dotless на тот момент поддерживала более старую версию LESS (поддержка LESS 1.4.X появилась в dotless только в декабре 2013 года). Фактически все перечисленные инструменты для работы с LESS в одночасье стали морально устаревшими.

Для того чтобы исправить сложившуюся ситуацию, я решил реализовать в модулях BundleTransformer.Less и BundleTransformer.LessLite собственную версию LESS-компилятора на основе исходного кода проекта less.js [11]. К тому времени у меня уже был большой опыт создания компиляторов (трансляторов) и минимизаторов на базе Node.js-библиотек (модули BundleTransformer.CoffeeScript [12], BundleTransformer.TypeScript [13], BundleTransformer.UglifyJs [14] и BundleTransformer.Csso [15]). Первоначально в обновленных модулях BundleTransformer.Less и BundleTransformer.LessLite в качестве JavaScript-движка использовалась библиотека MSIE JavaScript Engine for .Net [16], но с ростом популярности этих модулей я стал получать много сообщений от пользователей, которые просили меня отказаться от MSIE JavaScript Engine for .Net и использовать вместо нее одну из реализаций движка V8 под .NET. Так я начал работу над своим новым проектом — JavaScript Engine Switcher [17].

JavaScript Engine Switcher – это .NET-библиотека, которая определяет унифицированный интерфейс доступа к базовым возможностям популярных JavaScript-движков:

  1. MSIE JavaScript Engine for .Net
  2. V8 (первоначально в качестве реализации движка использовалась библиотека Noesis Javascript .NET [18], но из-за плохой совместимости с 64-битными версиями IIS 8.X она была заменена на более современную библиотеку — Microsoft ClearScript.V8 [19])
  3. Jurassic [20]

JavaScript Engine Switcher позволяет легко и быстро переключить любой .NET-проект на использование другого JavaScript-движка. Кроме того, у вас есть возможность подключить свой любимый JavaScript-движок с помощью JavaScript Engine Switcher. Для этого нужно написать адаптер, который реализует интерфейс IJsEngine или наследует класс JsEngineBase из пространства имен JavaScriptEngineSwitcher.Core, а затем зарегистрировать его в элементе configurationjsEngineSwitchercoreengines конфигурационного файла (Web.config или App.config).

Начиная с версии 1.8.0 все модули Bundle Transformer, созданные на основе кода JavaScript-библиотек, стали использовать JavaScript Engine Switcher. Разработка модуля BundleTransformer.LessLite была прекращена, т.к. он уже ничем не отличался от BundleTransformer.Less. Возможность использования движка V8 позволила на основе кода проекта Clean-css [21] создать модуль BundleTransformer.CleanCss [22].

Отсутствие прямой зависимости от Internet Explorer и поддержка самых последних версий LESS (на данный момент поддерживается LESS 1.6.1) позволила Bundle Transformer обойти всех своих конкурентов и занять 21-е место в категории ASP.NET [23] рейтинга сайта NuGet Gallery. Постоянный приток новых пользователей способствовал появлению актуальных технических статей о Bundle Transformer:

  1. Статья Дженнифер Семтнер «Setting up ASP.NET MVC 4 and Twitter Bootstrap 3 with LESS» [24]
  2. Статья Тома Дюпона «Bootstrap 3, LESS, Bundling, and ASP.NET MVC» [25]
  3. Пост Евгения Ярославова «Использование LESS в проектах ASP.NET MVC» [26] в блоге компании «ТиЭс Софт» [27]
  4. Пост пользователя Kalint «Guide to getting LESS working with Twitter Bootstrap in MVC 5» [28] на форуме сайта Neowin.net [29]

Помимо этого некоторые разработчики ПО стали включать Bundle Transformer в состав своих продуктов:

  1. Демонстрационный проект Майкла Берда «MVC4 Bootstrap .less{} Demo Project» [30]
  2. Расширение Sassy [31] для CMS Umbraco, разработанное Уорреном Бакли
  3. Расширение Optimus [32] для CMS Umbraco, разработанное Тимом Гейссенсом, Уорреном Бакли и Дживоном Леопольдом
  4. Проект «Open Government Data Initiative v6» [33]
  5. CMS EonicWeb5 [34]

А теперь перейдем к подборке наиболее ярких упоминаний о Bundle Transformer:

1. 77-й выпуск интернет радио-шоу Code Name «APS»

Фрагмент сайта радио-шоу Code Name «APS»

В предыдущей статье я уже рассказывал о 21-м выпуске радио-шоу Code Name «APS» [35] на Бинарном Радио [36], в эфире которого местные диджеи сделали обзор Bundle Transformer 1.6.5. На этот раз мне посчастливилось стать гостем 77-го выпуска данного радио-шоу. В основном я рассказывал о Bundle Transformer и WebMarkupMin [37], но в процессе обсуждения также были затронуты следующие темы: WebMatrix, ASP.NET Web Pages, Web Essentials 2013, TypeScript, Windows 8 и веб-сервисы. Запись данной радио-передачи можно прослушать в группе Бинарного Радио [38] в социальной сети «ВКонтакте» или скачать в виде MP3-файла [39].

2. Презентация расширения Optimus на конференции «Umbraco UK Fest 2013»

Фрагмент видео-ролика «Optimus, the trailer»

Optimus [32] – это расширение для CMS Umbraco [40], созданное на основе Microsoft ASP.NET Web Optimization Framework [41] и Bundle Transformer. Данное расширение позволяет front-end разработчикам, не знакомым c C# или VB.NET, создавать бандлы через интерфейс административной части Umbraco. Также для Optimus существуют дополнительные модули (провайдеры), которые позволяют добавить поддержку промежуточных языков: LESS, Sass/SCSS, CoffeeScript и TypeScript.

Стоит отметить, что авторы расширения (Тим Гейссенс и Уоррен Бакли) очень творчески подошли к выбору его названия. Название «Optimus» одновременно обыгрывает названия двух базовых продуктов:

  1. Оно созвучно со словом «Optimization» из Microsoft ASP.NET Web Optimization Framework.
  2. Совпадает с именем одного из главных персонажей вселенной трансформеров — Оптимуса Прайма [42].

Даже в логотипе расширения присутствует эмблема трансформеров-автоботов [43]:
Логотип расширения Optimus [44]
Не менее креативным было и выступление Тима Гейссенса на конференции «Umbraco UK Fest 2013» [45]:

Более подробную информацию об Optimus вы можете найти в блоге Тима Гейссенса [46] и статье Уоррена Бакли «Transformers! Robots in Disguise» [47].

3. Обучающий курс «ASP.NET Bundling, Minification & Resource Optimization» от Pluralsight

Фрагмент страницы обучающего курса «ASP.NET Bundling, Minification & Resource Optimization» на сайте компании Pluralsight

Обучающий курс Трэвиса Госселина «ASP.NET Bundling, Minification & Resource Optimization» [48], содержит практически исчерпывающую информацию о работе с библиотекой Microsoft ASP.NET Web Optimization Framework (не была затронута только тема использования данной библиотеки в ASP.NET Web Pages). Раньше подобную информацию приходилось собирать по крупицам: читать официальную документацию [49], следить за блогом Говарда Дёркинга [50], искать ответы на Stack Overflow [51] и даже изучать код сборки System.Web.Optimization.dll с помощью декомпилятора.

Как вы уже успели догадаться, в таком большом курсе нашлось место и для Bundle Transformer. Работе с Bundle Transformer посвящены два видео-ролика:

Фрагмент оглавления обучающего курса «ASP.NET Bundling, Minification & Resource Optimization» на сайте компании Pluralsight [52]

В видео-ролике «Demo: Bundle Transformer Package» автор курса на примере установки и настройки модулей BundleTransformer.Less и BundleTransformer.Yui [53] объясняет основные принципы работы с Bundle Transformer и приводит следующий пример кода:

bundles.Add(new Bundle("~/bundles/app", new JsTransformer())
	.IncludeDirectory("~/Scripts/app", "*.js"));

bundles.Add(new Bundle("~/styles/site", new CssTransformer()).Include(
	"~/Content/bootstrap/bootstrap.css",
	"~/Content/site.less",
	"~/Content/toastr.css"));

В принципе, это корректный код, но его можно сделать более производительным, если в качестве построителя кода по умолчанию использовать экземпляр класса NullBuilder:

var nullBuilder = new NullBuilder();

bundles.Add(new Bundle("~/bundles/app", new JsTransformer())
	{
		Builder = nullBuilder
	}
	.IncludeDirectory("~/Scripts/app", "*.js"));

bundles.Add(new Bundle("~/styles/site", new CssTransformer())
	{
		Builder = nullBuilder
	}
	.Include(
		"~/Content/bootstrap/bootstrap.css",
		"~/Content/site.less",
		"~/Content/toastr.css"));

Кроме того, объем данного кода можно сократить, если воспользоваться классами CustomScriptBundle и CustomStyleBundle:

bundles.Add(new CustomScriptBundle("~/bundles/app")
	.IncludeDirectory("~/Scripts/app", "*.js"));

bundles.Add(new CustomStyleBundle("~/styles/site")
	.Include(
		"~/Content/bootstrap/bootstrap.css",
		"~/Content/site.less",
		"~/Content/toastr.css"));

Несмотря на то, что я давно использую Microsoft ASP.NET Web Optimization Framework и хорошо знаю его внутреннее устройство, из этого курса я смог подчеркнуть для себя много нового (особенно из двух последних модулей: «Architecting Optimizations» и «Testing Optimizations»).

Заключение

В заключении, я хотел бы поблагодарить всех технических специалистов, которые помогают мне продвигать Bundle Transformer в широкие массы.

Автор: Taritsyn

Источник [54]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/53910

Ссылки в тексте:

[1] Image: http://taritsyn.files.wordpress.com/2014/01/bundle-transformer-mosaic-jan-2014.png

[2] предыдущей статьи: https://www.pvsm.ru/2013/05/04/bandl-para-para-pa-hjej-ili-bundle-transformer-shagaet-po-planete/

[3] Bundle Transformer: http://bundletransformer.codeplex.com/

[4] dotless: http://www.dotlesscss.org/

[5] Cassette: http://getcassette.net/

[6] SquishIt: http://github.com/jetheredge/SquishIt

[7] Combres: http://github.com/buunguyen/combres

[8] RequestReduce: http://requestreduce.org/

[9] BundleTransformer.Less: http://nuget.org/packages/BundleTransformer.Less/

[10] Twitter Bootstrap 3.0: http://getbootstrap.com/

[11] less.js: http://github.com/less/less.js

[12] BundleTransformer.CoffeeScript: http://nuget.org/packages/BundleTransformer.CoffeeScript/

[13] BundleTransformer.TypeScript: http://nuget.org/packages/BundleTransformer.TypeScript/

[14] BundleTransformer.UglifyJs: http://nuget.org/packages/BundleTransformer.UglifyJs/

[15] BundleTransformer.Csso: http://nuget.org/packages/BundleTransformer.Csso/

[16] MSIE JavaScript Engine for .Net: http://github.com/Taritsyn/MsieJavaScriptEngine

[17] JavaScript Engine Switcher: http://github.com/Taritsyn/JavaScriptEngineSwitcher

[18] Noesis Javascript .NET: http://javascriptdotnet.codeplex.com/

[19] Microsoft ClearScript.V8: http://clearscript.codeplex.com/

[20] Jurassic: http://jurassic.codeplex.com/

[21] Clean-css: http://github.com/GoalSmashers/clean-css

[22] BundleTransformer.CleanCss: http://nuget.org/packages/BundleTransformer.CleanCss/

[23] категории ASP.NET: http://nuget.org/packages?q=Tags%3A%22ASP.NET%22&sortOrder=package-download-count&page=2&prerelease=False

[24] «Setting up ASP.NET MVC 4 and Twitter Bootstrap 3 with LESS»: http://www.jennifersemtner.com/css/326/setting-up-asp-net-mvc-4-and-twitter-bootstrap-3-with-less/

[25] «Bootstrap 3, LESS, Bundling, and ASP.NET MVC»: http://www.tomdupont.net/2013/10/bootstrap-3-less-bundling-and-aspnet-mvc.html

[26] «Использование LESS в проектах ASP.NET MVC»: http://ts-soft.ru/blog/less-aspnet/

[27] «ТиЭс Софт»: http://ts-soft.ru/

[28] «Guide to getting LESS working with Twitter Bootstrap in MVC 5»: http://www.neowin.net/forum/topic/1191221-guide-to-getting-less-working-with-twitter-bootstrap-in-mvc-5/

[29] Neowin.net: http://www.neowin.net/

[30] «MVC4 Bootstrap .less{} Demo Project»: http://github.com/michaeljbaird/Mvc4BootstrapLessDemo

[31] Sassy: http://our.umbraco.org/projects/backoffice-extensions/sassy

[32] Optimus: http://our.umbraco.org/projects/developer-tools/optimus

[33] «Open Government Data Initiative v6»: http://github.com/openlab/OGDI-DataLab

[34] EonicWeb5: http://www.eonicweb.com/

[35] Code Name «APS»: http://aps-radio.com/

[36] Бинарном Радио: http://binradio.ru/

[37] WebMarkupMin: http://webmarkupmin.codeplex.com/

[38] прослушать в группе Бинарного Радио: http://vk.com/audios-40009810?q=Code%20Name%20%22APS%22

[39] скачать в виде MP3-файла: http://www.dropbox.com/s/t6ipjvvhp9y79ce/Code-Name-APS-77.mp3

[40] Umbraco: http://umbraco.com/

[41] Microsoft ASP.NET Web Optimization Framework: http://aspnetoptimization.codeplex.com/

[42] Оптимуса Прайма: http://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%83%D1%81_%D0%9F%D1%80%D0%B0%D0%B9%D0%BC

[43] трансформеров-автоботов: http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%B1%D0%BE%D1%82%D1%8B

[44] Image: http://taritsyn.files.wordpress.com/2014/01/optimus-logo.png

[45] «Umbraco UK Fest 2013»: http://umbracoukfestival.co.uk/

[46] блоге Тима Гейссенса: http://www.nibble.be/index.php?s=Optimus

[47] «Transformers! Robots in Disguise»: http://creativewebspecialist.co.uk/2013/07/12/transformers-robots-in-disguise/

[48] «ASP.NET Bundling, Minification & Resource Optimization»: http://pluralsight.com/training/Courses/TableOfContents/aspnet-bundling-minification-resource-optimization

[49] официальную документацию: http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

[50] блогом Говарда Дёркинга: http://codebetter.com/howarddierking/

[51] Stack Overflow: http://stackoverflow.com/

[52] Image: http://taritsyn.files.wordpress.com/2014/01/pluralsight-aspnet-bundling-minification-resource-optimization-table-of-contents.png

[53] BundleTransformer.Yui: http://nuget.org/packages/BundleTransformer.Yui/

[54] Источник: http://habrahabr.ru/post/210884/