Taritsyn
Основным нововведением в новой версии Bundle Transformer стала поддержка языка TypeScript. Кроме того, были внесены изменения в ядро продукта и в следующие модули: BundleTransformer.MicrosoftAjax, BundleTransformer.Yui и BundleTransformer.Csso.
Рассмотрим основные нововведения данной версии:
Ядро
В BundleTransformer.Core появилась возможность отказаться от использования предварительно минимизированных файлов (например, файлы с расширениями *.min.css
и *.min.js
) и производить минимизацию кода исключительно средствами выбранного минимизатора. За включение/отключение использования предварительно минимизированных файлов отвечают атрибуты usePreMinifiedFiles
конфигурационных элементов css
и js
. В следующем примере показан код, отключающий использование предварительно минимизированных файлов.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
<core>
<css usePreMinifiedFiles="false">
...
</css>
<js usePreMinifiedFiles="false">
...
</js>
...
</core>
...
</bundleTransformer>
...
</configuration>
По умолчанию атрибутам usePreMinifiedFiles
присвоены значения равные true
.
Данная возможность пригодится тем разработчикам, которые хотят применить ко всему CSS- и/или JS-коду своего веб-приложения алгоритмы минимизации, обладающие наивысшей степенью сжатия. Но следует помнить, что некоторые JS-библиотеки не получится сжать без ошибок. Кроме того, объем сжимаемого кода увеличится, что приведет увеличению продолжительности минимизации на лету.
Трансляторы
Bundle Transformer: TypeScript
Модуль BundleTransformer.TypeScript содержит адаптер-транслятор TypeScriptTranslator
, производящий трансляцию TypeScript-кода в JavaScript. Если вы еще ничего не слышали о TypeScript, то рекомендую вам прочитать следующие статьи: "TypeScript: язык для разработки больших приложений на JavaScript" Анатолия Ализара и "TypeScript для ASP.NET MVC 4 веб-приложений" Андрея Веселова.
Параметры компиляции TypeScript-кода можно настроить с помощью конфигурационной секции typeScript
в файле Web.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
<typeScript useNativeMinification="false" useDefaultLib="true"
propagateConstants="false" errorOnWith="true"
inferPropertiesFromThisAssignment="false"
codeGenTarget="EcmaScript3">
<style bitwise="false" blockInCompoundStatement="false"
eqEqEq="false" forIn="false" emptyBlocks="true"
newMustBeUsed="false" requireSemicolons="false"
assignmentInConditions="false" eqNull="false"
evalOk="true" innerScopeDeclarationsEscape="true"
functionsInLoops="true" reDeclareLocal="true"
literalSubscript="true" implicitAny="false" />
</typeScript>
...
</bundleTransformer>
...
</configuration>
Названия и возможные значения большего количества свойств совпадают с конфигурационными свойствами исходного компилятора, поэтому я рассмотрю свойства, назначение которых может быть не очевидно:
useNativeMinification="(true/false)"
. Разрешает минимизацию генерируемого JS-кода средствами TypeScript-компилятора. При встроенной минимизации производится удаление пробельных символов и комментариев. Сжатый таким образом код уже не подвергается минимизации средствами модуля-минимизатора, поэтому использовать встроенную минимизацию следует только в случаях, когда по каким-то причинам использование модуля-минимизатора невозможно. Данное конфигурационное свойство управляет сразу двумя свойствами компилятора: minWhitespace
иemitComments
.
useDefaultLib="(true/false)"
. Разрешает загрузку в компилятор определений общих типов, объявленных в файле lib.d.ts
. К общим типам относятся основные типы из ECMAScript, DOM и Windows Script Host.
Чтобы скомпилировать код TS-файла, в котором используются типы, объявленные в других файлах, вам необходимо добавить в код ссылки на эти файлы. Ссылки на файлы добавляются с помощью документирующих тегов <reference>
(более подробную информацию о данном теге вы можете прочитать в статье "Облегчаем работу с JS- и CSS-кодом в Visual Studio").
/// <reference path="jquery.d.ts" />
/// <reference path="TranslatorBadge.ts" />
/// <summary>
/// Creates colored badge for translator
/// </summary>
;class ColoredTranslatorBadge extends TranslatorBadge {
public getTextColor(): string {
/// <summary>
/// Gets a text color of badge
/// </summary>
/// <returns type="String">
/// Text color of badge
/// </returns>
return this.$linkElem.css("color");
}
public setTextColor(color: string): void {
/// <summary>
/// Sets a text color of badge
/// </summary>
/// <param name="color" type="String">
/// Text color of badge
/// </param>
this.$linkElem.css("color", color);
}
public getBorderColor(): string {
/// <summary>
/// Gets a border color of badge
/// </summary>
/// <returns type="String">
/// Border color of badge
/// </returns>
return this.$badgeElem.css("border-color");
}
public setBorderColor(color: string) {
/// <summary>
/// Sets a border color of badge
/// </summary>
/// <param name="color" type="String">
/// Border color of badge
/// </param>
this.$badgeElem.css("border-color", color);
}
}
В приведенном выше коде с помощью документирующих тегов <reference>
добавляются ссылки на файлыjquery.d.ts
и TranslatorBadge.ts.
Ссылки по теме