- PVSM.RU - https://www.pvsm.ru -
Я немного отойду от формата предыдущей статьи [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-движков:
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:
Помимо этого некоторые разработчики ПО стали включать Bundle Transformer в состав своих продуктов:
А теперь перейдем к подборке наиболее ярких упоминаний о Bundle Transformer:
В предыдущей статье я уже рассказывал о 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].
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» одновременно обыгрывает названия двух базовых продуктов:
Даже в логотипе расширения присутствует эмблема трансформеров-автоботов [43]:
[44]
Не менее креативным было и выступление Тима Гейссенса на конференции «Umbraco UK Fest 2013» [45]:
Более подробную информацию об Optimus вы можете найти в блоге Тима Гейссенса [46] и статье Уоррена Бакли «Transformers! Robots in Disguise» [47].
Обучающий курс Трэвиса Госселина «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 посвящены два видео-ролика:
В видео-ролике «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/
Нажмите здесь для печати.