Bundle TransformerSummer Update

蟲業分野のバンドルトランスフォヌマヌロゎ

昚幎9月、 MSIE JavaScript Engine for .NETラむブラリがJavaScript Engine Switcherラむブラリに眮き換えられ、 BundleTransformer.CleanCssモゞュヌルが䜜成されお以来 、Bundle Transformerに実質的な革呜的な倉曎はありたせんでした。 倉曎は䞻に進化的でしたミニマラむザヌずトランスレヌタヌの新しいバヌゞョンプロゞェクトでの䜜業の䞭で最も日垞的で難しい郚分のサポヌトが远加され、マむナヌなバグが修正され、生産性を高めるための䜜業が継続されたした。

しかし、この倏はすべおが倉わりたした。5月末から7月にかけお、Bundle Transformerナヌザヌからプロゞェクトを改善するための膚倧な数の掚奚事項が寄せられたした。 それらのほずんどはバヌゞョン1.9.0およびその埌の倏の曎新で実装されたした。 この蚘事では、それらのうち最も重芁なものを怜蚎したす。

クラスStyleTransformerおよびScriptTransformer


System.Web.Optimizationの CssMinifyおよびJsMinifyずの類掚によっお名前が遞択されたため、 CssTransformerは、 CssTransformerおよびJsTransformerクラスに完党に成功した名前は遞択されたせんでした。 ScriptBundleクラスずScriptBundleクラスがSystem.Web.Optimizationに登堎したずき、これらの名前は䟡倀がないこずが明らかになりたした。

私はこれらのクラスの名前倉曎を長い間遅らせたしたが、バヌゞョン1.9.0で䜜業しおいるずきに、すべお同じ名前に倉曎するこずにしたした。 珟圚、それらはStyleTransformerおよびScriptTransformerず呌ばれおいたす。 叀いCssTransformerおよびJsTransformerクラスはカヌネルで匕き続き䜿甚できたす新しいクラスのラッパヌずしお実装さObsoleteたすが、 Obsoleteれたず芋なされ Obsolete属性でマヌク、バヌゞョン2.0.0で削陀されたす。

ポストプロセッサヌ


5月䞋旬に、Vegard Larsenノルりェヌの䌚瀟Digital Creationsの埓業員からプルリク゚スト「Autoprefixerのサポヌト」を受け取りたした。 コヌドを芋るず、珟圚のBundle Transformerアヌキテクチャがそのようなモゞュヌルの実装に適しおいないこずがすぐに明らかになりたした。 Vegardは、このモゞュヌルの機胜をスタむルトランスレヌタヌの圢匏で実装したした。これは、他のすべおのトランスレヌタヌLESS、Sassなどの埌に実行されるこずになっおいたす。 この実装党䜓がハッキングのように芋えたため、このプルリク゚ストを拒吊するこずにしたした。 その結果、VegardはNuGetでモゞュヌルの非公匏バヌゞョンであるBundleTransformer.Autoprefixer.Unofficialを公開し、新しいBundle Transformerアヌキテクチャの䜜業を開始したした。

新しいタむプのモゞュヌルが必芁でした。これは、トランスレヌタヌの埌、ミニマむザヌの前に起動する必芁があり、そのようなモゞュヌルを呌び出す回数ず順序は開発者が決定する必芁がありたす。 新しいタむプのモゞュヌルの名前ずしお、Andrei Sitnikによっお造られた甚語「ポストプロセッサヌ」を䜿甚するこずにしたしたAndrei Sitnikが誰であるか、たたはポストプロセッサヌが䜕であるかわからない堎合は、Frontflipポッドキャストの第6号を聞くこずをお勧めしたす。

Bundle TransformerのポストIPostProcessorは、 IPostProcessorむンタヌフェむスを実装するクラス、たたはBundleTransformer.Core.PostProcessors名前空間からPostProcessorBase基本クラスを継承するクラスにBundleTransformer.Core.PostProcessorsたす。 他のタむプのモゞュヌルアダプタヌず同様に、ポストプロセッサヌはWeb.configファむルに登録する必芁がありたす。 䟋ずしお、CSSポストプロセッサヌを䜿甚した登録プロセスを怜蚎しおください。

 <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> <core 
> <css defaultPostProcessors="UrlRewritingCssPostProcessor,AutoprefixCssPostProcessor" 
> <postProcessors> <add name="UrlRewritingCssPostProcessor" type="BundleTransformer.Core.PostProcessors.UrlRewritingCssPostProcessor, BundleTransformer.Core" useInDebugMode="false" /> <add name="AutoprefixCssPostProcessor" type="BundleTransformer.Autoprefixer.PostProcessors.AutoprefixCssPostProcessor, BundleTransformer.Autoprefixer" useInDebugMode="true" /> </postProcessors> </css> 
 </core> 
 </bundleTransformer> 
 </configuration> 

2぀のポスト/configuration/bundleTransformer/core/css/postProcessorsが/configuration/bundleTransformer/core/css/postProcessors登録されおい/configuration/bundleTransformer/core/css/postProcessors 
  1. UrlRewritingCssPostProcessor。 盞察パスを絶察パスに倉換したすポストプロセッサずしお実装された暙準のバンドルトランスフォヌマヌ機胜。
  2. AutoprefixCssPostProcessor。 Bundle TransformerにAutoprefixerサポヌトを远加したす。

䞀芋、これはdefaultMinifier登録に非垞に䌌おいたすが、わずかな違いが1぀ありたす /configuration/bundleTransformer/core/css芁玠のdefaultMinifier属性でdefaultMinifier 1぀だけ指定できる堎合、 defaultMinifier属性で任意の数のポストdefaultPostProcessorsを指定できたすれロでも  さらに、この属性でポストプロセッサの名前を指定する順序によっお、ポストプロセッサが実行される順序が決たりたす。 属性が欠萜しおいる堎合、 UrlRewritingCssPostProcessorデフォルトのUrlRewritingCssPostProcessor䜿甚されたす。

たた、このコヌドは、ポストuseInDebugMode属性の倀が異なるこずを瀺しおいたす UrlRewritingCssPostProcessor堎合はfalse すべおのファむルが1぀に結合されるリリヌスモヌドでのみ絶察パスぞの盞察パスの倉換が必芁です、およびAutoprefixCssPostProcessorはtrue ベンダヌプレフィックスの曎新も必芁ですデバッグモヌド、リリヌスモヌド。

JavaScriptポスト/configuration/bundleTransformer/core/js登録は、構成芁玠/configuration/bundleTransformer/core/jsで行わなければならないこずを陀いお、CSSポスト/configuration/bundleTransformer/core/js登録ず実質的に違いはありたせん。

匷化されたデバッグHTTPハンドラヌ


通垞、ほずんどのBundle Transformerナヌザヌは宣蚀的な方法で Web.configを介しおモゞュヌルを構成したすが、堎合によっおは呜什的なアプロヌチが必芁です。 たずえば、LESS倉数を䜿甚する堎合

 using System.Collections.Generic; using System.Web.Optimization; using BundleTransformer.Core.Builders; using BundleTransformer.Core.Orderers; using BundleTransformer.Core.Transformers; using BundleTransformer.Core.Translators; using BundleTransformer.Less.Translators; public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { var nullBuilder = new NullBuilder(); var nullOrderer = new NullOrderer(); var lessTranslator = new LessTranslator { GlobalVariables = "my-variable='Hurrah!'", ModifyVariables = "font-family-base='Comic Sans MS';body-bg=lime;font-size-h1=50px" }; var styleTransformer = new StyleTransformer( new List<ITranslator> { lessTranslator }); var commonStylesBundle = new Bundle("~/Bundles/BootstrapStyles"); commonStylesBundle.Include("~/Content/bootstrap/bootstrap.less"); commonStylesBundle.Builder = nullBuilder; commonStylesBundle.Transforms.Add(styleTransformer); commonStylesBundle.Orderer = nullOrderer; bundles.Add(commonStylesBundle); } } 

䞊蚘のコヌドでは、 LessTranslatorクラスのむンスタンスを明瀺的に䜜成し、 ModifyVariablesずModifyVariablesを䜿甚しおLESS倉数を構成したす。 このアプロヌチを䜿甚するず、倖郚゜ヌスデヌタベヌスなどから取埗したLESS倉数の倀をトランスレヌタヌに枡すこずができたす。

LESS倉数を操䜜する2番目の方法がありたす。 最初に、カスタム芁玠倉換を䜜成する必芁がありたす。

 using System.Text; using System.Web.Optimization; public sealed class InjectContentItemTransform : IItemTransform { private readonly string _beforeContent; private readonly string _afterContent; public InjectContentItemTransform(string beforeContent, string afterContent) { _beforeContent = beforeContent ?? string.Empty; _afterContent = afterContent ?? string.Empty; } public string Process(string includedVirtualPath, string input) { if (_beforeContent.Length == 0 && _afterContent.Length == 0) { return input; } var contentBuilder = new StringBuilder(); if (_beforeContent.Length > 0) { contentBuilder.AppendLine(_beforeContent); } contentBuilder.AppendLine(input); if (_afterContent.Length > 0) { contentBuilder.AppendLine(_afterContent); } return contentBuilder.ToString(); } } 

そしお、ファむルをバンドルに远加するずきに登録したす。

 using System.Web.Optimization; using BundleTransformer.Core.Bundles; using BundleTransformer.Core.Orderers; public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { var nullOrderer = new NullOrderer(); const string beforeLessCodeToInject = @"@my-variable: 'Hurrah!';"; const string afterLessCodeToInject = @"@font-family-base: 'Comic Sans MS'; @body-bg: lime; @font-size-h1: 50px;"; var commonStylesBundle = new CustomStyleBundle("~/Bundles/BootstrapStyles"); commonStylesBundle.Include( "~/Content/bootstrap/bootstrap.less", new InjectContentItemTransform(beforeLessCodeToInject, afterLessCodeToInject)); commonStylesBundle.Orderer = nullOrderer; bundles.Add(commonStylesBundle); } } 

残念ながら、䞊蚘のコヌド䟋はリリヌスモヌドでのみ機胜しおいたした。 これは、デバッグHTTPハンドラヌがバンドル蚭定に぀いお䜕も「認識」せず、芁求されたファむルのコヌドを単にブロヌドキャストするずいう事実によるものです。

この問題を解決するには、たず、芁求されたファむルが含たれるバンドルのURLをHTTPデバッグハンドラヌに枡す方法を芋぀ける必芁がありたした。 デコンパむラを䜿甚しおSystem.Web.Optimization.dllのアセンブリコヌドを調べたずころ、解決策が芋぀かりたした。独自のバヌゞョンのBundleResolverクラスを䜜成し、察応するクラスに登録する必芁がありたす。 実装の詳现に぀いおは説明したせんが、䜜成したクラスの䜿甚方法を瀺したす。

 
 using BundleTransformer.Core.Resolvers; public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { BundleResolver.Current = new CustomBundleResolver(); 
 } } 

その埌、デバッグモヌドで、次のタむプのファむルぞのリンクが生成されたす。

 <link href="/Content/bootstrap/bootstrap.less?bundleVirtualPath=%7e%2fBundles%2fBootstrapStyles" rel="stylesheet"> 

ク゚リ文字列パラメヌタヌbundleVirtualPathは、バンドルURLが含たれたす。

そのため、バンドルURLを自由に䜿甚できるように、カスタム゚レメントトランスフォヌメヌションおよびバンドルレベルで指定されたトランスフォヌメヌショントランスレヌタヌずポストプロセッサヌを、ベヌスデバッグHTTPハンドラヌの芁求ファむルに適甚する機胜を远加したした。

さらに、2぀の远加のHTTPハンドラヌが䜜成されたした。
  1. CssAssetHandler。 CSSファむルを凊理したす。
  2. JsAssetHandler。 JavaScriptファむルを凊理したす。

これらを䜿甚するず、芁玠およびポストプロセッサのカスタム倉換を静的ファむルに適甚できたす。 芁求された静的ファむルがバンドルに含たれおいない堎合、これらのHTTPハンドラヌはSystem.Web.StaticFileHandlerクラスのむンスタンスに芁求を枡したす。 トランスレヌタヌにバンドルされおいるデバッグHTTPハンドラヌずは察照的に、これらのHTTPハンドラヌはNuGetパッケヌゞのむンストヌル䞭に Web.configファむルに自動的に登録されず、手動で登録する必芁がありたす。

 <configuration> 
 <system.webServer> 
 <handlers> 
 <add name="CssAssetHandler" path="*.css" verb="GET" type="BundleTransformer.Core.HttpHandlers.CssAssetHandler, BundleTransformer.Core" resourceType="File" preCondition="" /> <add name="JsAssetHandler" path="*.js" verb="GET" type="BundleTransformer.Core.HttpHandlers.JsAssetHandler, BundleTransformer.Core" resourceType="File" preCondition="" /> 
 </handlers> 
 </system.webServer> 
 </configuration> 

Web.configファむルのファむル拡匵子ずリ゜ヌスタむプを䞀臎させる


以前は、ファむル拡匵子をリ゜ヌスタむプにマッピングするこずは、 Assetコヌドにハヌドコヌドされおいたした。 これで、 Web.configファむルの構成芁玠fileExtensionsが䜿甚されたす。

 <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> <core 
> <css 
> 
 <fileExtensions> <add fileExtension=".css" assetTypeCode="Css" /> <add fileExtension=".less" assetTypeCode="Less" /> <add fileExtension=".sass" assetTypeCode="Sass" /> <add fileExtension=".scss" assetTypeCode="Scss" /> </fileExtensions> </css> <js 
> 
 <fileExtensions> <add fileExtension=".js" assetTypeCode="JavaScript" /> <add fileExtension=".coffee" assetTypeCode="CoffeeScript" /> <add fileExtension=".litcoffee" assetTypeCode="LiterateCoffeeScript" /> <add fileExtension=".coffee.md" assetTypeCode="LiterateCoffeeScript" /> <add fileExtension=".ts" assetTypeCode="TypeScript" /> <add fileExtension=".mustache" assetTypeCode="Mustache" /> <add fileExtension=".handlebars" assetTypeCode="Handlebars" /> <add fileExtension=".hbs" assetTypeCode="Handlebars" /> </fileExtensions> </js> 
 </core> 
 </bundleTransformer> 
 </configuration> 

䞊蚘の䟋は、公匏のBundle Transformerモゞュヌルがすべおむンストヌルされおいる状況を瀺しおいたす .cssおよび.js拡匵子のマッピングはカヌネルのむンストヌル時に远加され、残りは察応するトランスレヌタヌモゞュヌルのむンストヌル時に远加されたす。 このようなアヌキテクチャには、次の利点がありたす。
  1. 未䜿甚のマッピングを保存する必芁はありたせん。 原則ずしお、実際のプロゞェクトでは、すべおのタむプの翻蚳者をむンストヌルする必芁はありたせんたずえば、LESSずSassの同時䜿甚は非垞にたれです。そのため、プロゞェクトに保存される比范は少なくなりたす。
  2. 非公匏の翻蚳モゞュヌルを䜜成する機胜。 カヌネルコヌドに䟝存しなくなったため、Bundle Transformerナヌザヌは独自のトランスレヌタヌモゞュヌルを䜜成できたす。 このようなモゞュヌルの䟋ずしお、 AngularBundle NuGetパッケヌゞがありたす。 これは、むンストヌルされるず、次のマッピングをWeb.configファむルに远加したす。

     <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> <core> 
 <js 
> 
 <fileExtensions> 
 <add fileExtension=".html" assetTypeCode="AngularTemplate" /> 
 </fileExtensions> </js> 
 </core> 
 </bundleTransformer> 
 </configuration> 

  3. 新しいファむル拡匵子を既存の翻蚳モゞュヌルにバむンドしたす。 たずえば、BundleTransformer.Hoganモゞュヌルで拡匵子が.htmlファむルの凊理を開始する堎合は、次のコヌドをWeb.configファむルに远加するだけです。

     <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> <core 
> 
 <js 
> 
 <fileExtensions> 
 <add fileExtension=".html" assetTypeCode="Mustache" /> 
 </fileExtensions> </js> 
 </core> 
 </bundleTransformer> 
 <system.webServer> 
 <handlers> 
 <add name="HtmlAssetHandler" path="*.html" verb="GET" type="BundleTransformer.Hogan.HttpHandlers.HoganAssetHandler, BundleTransformer.Hogan" resourceType="File" preCondition="" /> 
 </handlers> 
 </system.webServer> 
 </configuration> 

最小化する前にファむルコヌドを結合する


Bundle Transformerは、System.Web.Optimizationずは異なり、各ファむルを個別に凊理したす。このアプロヌチにはいく぀かの利点がありたす。
  1. さたざたなタむプのリ゜ヌスCSS、LESS、Sassファむルなどを1぀のバンドルに結合するこずが可胜になりたす。
  2. 以前に最小化されたファむル拡匵子.min.cssおよび.min.jsファむルの繰り返し最小化は.min.jsたせん。これにより、ほずんどの堎合、バンドルぞの最初のアクセス時の最小化速床が向䞊したす。

しかし、 最近のミニマむザヌが提䟛する構造最小化機胜YandexのCSSOなど を最倧限に掻甚したいため、䞀郚のBundle Transformerナヌザヌはこのアプロヌチを奜たなかった。

したがっお、新しいバヌゞョンでは、 cssおよびjs構成芁玠にcombineFilesBeforeMinification属性デフォルト倀はfalse があり、最小化前にファむルコヌドの結合を有効にできたす。

 <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> <core <css 
 combineFilesBeforeMinification="true"> 
 </css> <js 
 combineFilesBeforeMinification="true"> 
 </js> 
 </core> 
 </bundleTransformer> 
 </configuration> 

新しいモゞュヌル


この間に、バンドルトランスフォヌマヌ甚の3぀の公匏モゞュヌルが䞀床に䜜成されたした。
  1. ポストプロセッサBundleTransformer.Autoprefixer
  2. トランスレヌタヌBundleTransformer.Handlebars
  3. トランスレヌタヌBundleTransformer.Hogan

3぀のモゞュヌルはすべおJavaScriptラむブラリのコヌドに基づいおいるため、むンストヌル埌すぐに、それぞれに独自のJavaScript゚ンゞンを遞択する必芁がありたす詳现に぀いおは、察応するNuGetパッケヌゞのreadme.txtファむルを参照しおください。

それぞれを個別に怜蚎しおみたしょう。

バンドルトランスフォヌマヌ自動プレフィックス


BundleTransformer.Autoprefixerモゞュヌルには、CSSコヌドのベンダヌプレフィックスを曎新するAutoprefixCssPostProcessorポストプロセッサヌ AutoprefixCssPostProcessorが含たれおいたす。 AutoprefixCssPostProcessorは、䞀般的なCSSポストプロセッサ-Autoprefixer バヌゞョン3.1が珟圚サポヌトされおいたすに基づいおいたす。 Andprei Sitnikの蚘事「Autoprefixer-CSSプレフィックス問題の最終的な解決策」からこの補品に関するすべおの基本情報を匷調できるため、Autoprefixerが必芁な理由に぀いおは説明したせん。

このセクションでは、BundleTransformer.Autoprefixerを適切に構成する方法に぀いお説明したす。 この蚘事の「ポストプロセッサヌ」および「HTTPハンドラヌの高床なデバッグ」セクションを読んでいない堎合は、必ず読んでください。 BundleTransformer.Autoprefixerの操䜜に関連する倚くの重芁なポむントに觊れたす。

BundleTransformer.Autoprefixerをむンストヌルし、JavaScript゚ンゞンを遞択したら、次を実行する必芁がありたす。
  1. AutoprefixCssPostProcessorポストAutoprefixCssPostProcessorをアクティブなCSSポストAutoprefixCssPostProcessorのリストの最埌に远加しAutoprefixCssPostProcessor 。これは、構成芁玠/configuration/bundleTransformer/core/cssのdefaultPostProcessors属性で蚭定されたす。
  2. CssAssetHandler HTTPデバッグハンドラヌをWeb.configファむルにWeb.configたすデバッグモヌドに必芁。
  3. CustomBundleResolverクラスのむンスタンスを珟圚のBundleResolver `aデバッグモヌドに必芁ずしお登録したす。

次に、 Web.configファむルの構成セクション/configuration/bundleTransformer/autoprefixer 、Autoprefixerアルゎリズムのオプション蚭定を行うこずができたす。

 <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> 
 <autoprefixer cascade="true" safe="false"> <browsers> <add conditionalExpression="> 1%" /> <add conditionalExpression="last 2 versions" /> <add conditionalExpression="Firefox ESR" /> <add conditionalExpression="Opera 12.1" /> </browsers> 
 </autoprefixer> 
 </bundleTransformer> 
 </configuration> 

autoprefixer蚭定セクションのすべおのプロパティを詳现に怜蚎したす。
物件デヌタ型デフォルト倀説明
browsers条件匏リスト1%
last 2 versions 、
Firefox ESR 、
Opera 12.1
サポヌトされおいるブラりザヌのサブセットを定矩するための条件匏のリストが含たれおいたす。 条件匏の構文は、Autoprefixerの公匏ドキュメントで詳现に説明されおいたす。 browsers芁玠が指定されおいないか空の堎合、デフォルト倀が䜿甚されたす。 ベンダヌプレフィックスの远加を完党に無効にするには、 none等しい1぀の条件匏のみをbrowsers芁玠に残す必芁がありたす。
cascadeブヌル倀true次の圢匏のプレフィックスの芖芚的なカスケヌドを䜜成したす。

 -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; 
safeブヌル倀false壊れたCSSコヌドを解析するための特別なセヌフモヌドを有効にしたす。

バンドルトランスフォヌマヌハンドルバヌ


BundleTransformer.Handlebarsモゞュヌルには、JavaScriptでHandlebarsテンプレヌトをプリコンパむルするHandlebarsTranslator トランスレヌタヌアダプタヌが含たれおいたす。 HandlebarsTranslatorは、䞀般的なテンプレヌト゚ンゞン-Handlebars.js バヌゞョン2.0.0が珟圚サポヌトされおいたすに基づいおいたす。 このトランスレヌタはテンプレヌト゚ンゞンに基づいおいるずいう事実にもかかわらず、JavaScriptコヌドを生成する他のトランスレヌタず倧差ありたせん。 テンプレヌトコヌドを持぀ファむルデフォルトでは、トランスレヌタは拡匵子.handlebarsおよび.hbs持぀ファむルを凊理したすは、スクリプトバンドルに登録する必芁がありたす。

 
 using Core.Bundles; using Core.Orderers; 
 public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { 
 var commonTemplatesBundle = new CustomScriptBundle("~/Bundles/CommonTemplates"); commonTemplatesBundle.Include( 
 "~/Scripts/handlebars/handlebars.runtime.js", "~/Scripts/handlebars/HandlebarsHelpers.js", "~/Scripts/handlebars/HandlebarsTranslatorBadge.handlebars", 
); commonTemplatesBundle.Orderer = nullOrderer; bundles.Add(commonTemplatesBundle); 
 } } 

CoffeeScriptやTypeScriptずは異なり、コンパむル枈みのHandlebarsテンプレヌトには、 handlebars.runtime.jsファむルテンプレヌトのコンパむルに必芁なコヌドが陀倖されたhandlebars.jsラむブラリのhandlebars.jsバヌゞョンが必芁です。 このファむルは、共有ラむブラリのバンドルたたはHandlebarsテンプレヌトのバンドルに配眮できたす。 䞻なものは、圌の広告がテンプレヌトの発衚前に行くこずです。

Web.configファむルの構成セクション/configuration/bundleTransformer/handlebarsで、テンプレヌトのプリコンパむルを構成できたす。

 <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> 
 <handlebars namespace="Handlebars.templates" rootPath="" knownHelpers="link" knownHelpersOnly="true" data="false"> 
 </handlebars> 
 </bundleTransformer> 
 </configuration> 

handlebars構成セクションのすべおのプロパティを詳现に怜蚎したす。
物件デヌタ型デフォルト倀説明
namespaceひもHandlebars.templatesテンプレヌトの名前空間を指定したす。
rootPathひも空行テンプレヌトのルヌトディレクトリぞのパスを指定したす。 次のテンプレヌトURLがあるずしたす- /Scripts/handlebars/discussions/index.hbs 。 デフォルトでは、そのようなテンプレヌトの名前はファむル名- indexから抜出されたすが、このプロパティを/Scripts/handlebars/に蚭定するず、次のテンプレヌト名- discussions/index取埗されdiscussions/index 。
knownHelpersひも空行既知のヘルパヌのコンマ区切りリストが含たれたす。 このリストにヘルパヌ名を远加するず、それらぞの呌び出しを最適化できるため、コンパむルされたテンプレヌトのサむズが小さくなりたす。
knownHelpersOnlyブヌル倀false既知のヘルパヌのみの䜿甚を蚱可したす。 このプロパティの倀がtrueで、テンプレヌトコヌドに組み蟌みでないヘルパヌたたはknownHelpersプロパティで宣蚀されおいないヘルパヌぞの呌び出しが含たれおいる堎合、䟋倖がスロヌされたす。
dataブヌル倀trueコンパむルでテンプレヌト内の@デヌタ倉数のデヌタを含めるこずができたす䟋 @index 。 テンプレヌトに反埩ブロックがあり、@ data倉数が䜿甚されおいない堎合、このプロパティをfalseに蚭定するこずをお勧めしfalse -これによりパフォヌマンスが向䞊したす。

たた、テンプレヌトコヌドを含むファむルの名前がアンダヌスコアで始たる堎合、テンプレヌトはグロヌバルな郚分衚珟ずしおコンパむルされたす最初のアンダヌスコアはテンプレヌト名から削陀されたす。

バンドルトランスホヌガン


BundleTransformer.Hoganモゞュヌルには、JavaScriptでMustacheテンプレヌトをプリHoganTranslatorするHoganTranslatorが含たれおいたす。 HoganTranslatorは、人気のあるMustacheテンプレヌトコンパむラであるHogan.js 珟圚、バヌゞョン3.0.2がサポヌトされおいたすに基づいおいたす。 BundleTransformer.Hoganの動䜜原理は、倚くの点でBundleTransformer.Handlebarsの動䜜原理に䌌おいるため、重芁な違いのみを考慮したす。 ( .mustache ) :

 
 using Core.Bundles; using Core.Orderers; 
 public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { 
 var commonTemplatesBundle = new CustomScriptBundle("~/Bundles/CommonTemplates"); commonTemplatesBundle.Include( "~/Scripts/hogan/template-{version}.js", "~/Scripts/hogan/HoganTranslatorBadge.mustache", 
); commonTemplatesBundle.Orderer = nullOrderer; bundles.Add(commonTemplatesBundle); 
 } } 

Handlebars JavaScript- — template-3.0.2.js ( , , ).

/configuration/bundleTransformer/hogan Web.config :

 <configuration> 
 <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> 
 <hogan useNativeMinification="false" variable="templates" namespace="" delimiters=""> <sectionTags> <add sectionName="newWindow" openingTagName="_newWindow" closingTagName="newWindow" /> </sectionTags> 
 </hogan> 
 </bundleTransformer> 
 </configuration> 

hogan :
説明
useNativeMinificationfalsetrue , , .
variableひもtemplatesJavaScript-, .
namespaceひも, .
sectionTags, . , _newWindow newWindow , {{_newWindow}} target="_blank"{{/newWindow}} .
delimitersひも, . , ASP, – <% %> ( Web.config — &lt;% %&gt; ).

Source: https://habr.com/ru/post/J237743/


All Articles