Quantcast
Channel: Bundle Transformer - a modular extension for ASP.NET Web Optimization Framework
Viewing all 2358 articles
Browse latest View live

Edited Unassigned: Commented-out @import directive in less file is still imported [49]

$
0
0
I have a less file that has a commented-out @import directive, like so:

...
// Grid system and page structure
//@import "scaffolding.less";
@import "grid.less";
//@import "layouts.less";
...

The "scaffolding.less" file doesn't exist, but that shouldn't matter since the import directive is commented out. However, Bundle.Transformer.Less.17.26 still attempts to load that file, causing an exception.

Commented Unassigned: Commented-out @import directive in less file is still imported [49]

$
0
0
I have a less file that has a commented-out @import directive, like so:

...
// Grid system and page structure
//@import "scaffolding.less";
@import "grid.less";
//@import "layouts.less";
...

The "scaffolding.less" file doesn't exist, but that shouldn't matter since the import directive is commented out. However, Bundle.Transformer.Less.17.26 still attempts to load that file, causing an exception.
Comments: Hello, MattXPO! In BundleTransformer.Less and BundleTransformer.LessLite 1.7.27 fixed this error.

Updated Wiki: Bundle Transformer 1.7.27

$
0
0

Bundle Transformer 1.7.27

Bundle Transformer logo

Before you read

Before you read the documentation for Bundle Transformer, i recommend to read chapter“Bundling and Minification” of the ASP.NET MVC 4 tutorial and Howard Dierking's article «New Web Optimization Pre-Release Package on NuGet». Also recommend you read the Rick Anderson's posts about using of Microsoft ASP.NET Web Optimization Framework with Web Forms and Web Pages.

Bundle Transformer does not minify HTML markup, embedded/inline styles and scripts. For these purposes it is recommended to useWebMarkupMin.

Examples of usage

Recommend to move the code, that is responsible for the registration of assets, from theGlobal.asax file in the BundleConfig.cs file and place this file in the App_Start directory. In the Global.asax file you need to leave only the code calling a method of classBundleConfig:

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace BundleTransformer.Example.Mvc
{
   publicclass MvcApplication : System.Web.HttpApplication
   {
      protectedvoid Application_Start()
      {
         AreaRegistration.RegisterAllAreas();

         FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
         RouteConfig.RegisterRoutes(RouteTable.Routes);
         BundleConfig.RegisterBundles(BundleTable.Bundles);
      }
   }
}

Here an example of registration of assets and configuration of their processing with the help ofCssTransformer and JsTransformer in the BundleConfig.cs file:

namespace BundleTransformer.Example.Mvc
{
   using System.Web.Optimization;

   using Core.Builders;using Core.Orderers;using Core.Transformers;publicclass BundleConfig
   {
      publicstaticvoid RegisterBundles(BundleCollection bundles)
      {
         bundles.UseCdn = true;

         var nullBuilder = new NullBuilder();var cssTransformer = new CssTransformer();var jsTransformer = new JsTransformer();var nullOrderer = new NullOrderer();

         var commonStylesBundle = new Bundle("~/Bundles/CommonStyles");
         commonStylesBundle.Include(
            "~/Content/Fonts.css",
            "~/Content/Site.css",
            "~/Content/BundleTransformer.css",
            "~/AlternativeContent/css/TestCssComponentsPaths.css",
            "~/Content/themes/base/jquery.ui.core.css",
            "~/Content/themes/base/jquery.ui.theme.css",
            "~/Content/themes/base/jquery.ui.resizable.css",
            "~/Content/themes/base/jquery.ui.button.css",
            "~/Content/themes/base/jquery.ui.dialog.css",
            "~/Content/TestTranslators.css",
            "~/Content/less/TestLess.less",
            "~/Content/sass/TestSass.sass",
            "~/Content/scss/TestScss.scss");
         commonStylesBundle.Builder = nullBuilder;
         commonStylesBundle.Transforms.Add(cssTransformer);
         commonStylesBundle.Orderer = nullOrderer;

         bundles.Add(commonStylesBundle);

         var modernizrBundle = new Bundle("~/Bundles/Modernizr");
         modernizrBundle.Include("~/Scripts/modernizr-2.*");
         modernizrBundle.Builder = nullBuilder;
         modernizrBundle.Transforms.Add(jsTransformer);
         modernizrBundle.Orderer = nullOrderer;

         bundles.Add(modernizrBundle);

         var jQueryBundle = new Bundle("~/Bundles/Jquery", 
            "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js");
         jQueryBundle.Include("~/Scripts/jquery-{version}.js");
         jQueryBundle.Builder = nullBuilder;
         jQueryBundle.Transforms.Add(jsTransformer);
         jQueryBundle.Orderer = nullOrderer;
         jQueryBundle.CdnFallbackExpression = "window.jquery";

         bundles.Add(jQueryBundle);

         var commonScriptsBundle = new Bundle("~/Bundles/CommonScripts");
         commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js",
            "~/Scripts/jquery-ui-{version}.js",
            "~/Scripts/jquery.validate.js",
            "~/Scripts/jquery.validate.unobtrusive.js",
            "~/Scripts/jquery.unobtrusive-ajax.js",
            "~/Scripts/knockout-2.*",
            "~/Scripts/coffee/TestCoffeeScript.coffee",
            "~/Scripts/coffee/TestLiterateCoffeeScript.litcoffee",
            "~/Scripts/coffee/TestCoffeeScriptMarkdown.coffee.md",
            "~/Scripts/ts/TranslatorBadge.ts",
            "~/Scripts/ts/ColoredTranslatorBadge.ts",
            "~/Scripts/ts/TestTypeScript.ts");
         commonStylesBundle.Builder = nullBuilder;
         commonScriptsBundle.Transforms.Add(jsTransformer);
         commonScriptsBundle.Orderer = nullOrderer;

         bundles.Add(commonScriptsBundle);
         …
      }
   }
}

NullBuilder class is responsible for prevention of early applying of the item transformations and combining of code.CssTransformer and JsTransformer classes produce processing of stylesheets and scripts. NullOrderer class disables the built-in sorting mechanism and save assets sorted in the order they are declared.

Bundle Transformer is not recommended to use together with the StyleBundle and ScriptBundle classes, because these classes already contain transformations (instances of the built-in minifier-transformations:CssMinify and JsMinify). If you are in this situation plug the Bundle Transformer minifiers-modules (for example, BundleTransformer.MicrosoftAjax or BundleTransformer.Yui), then it will lead to a double minification of code. In addition, minifier-modules of the Bundle Transformer do not produce the re-minification of code of pre-minified assets (for example, files with the extension*.min.js and *.min.css), that speeds up the process of optimization.

You also need to understand that when you plug instances of CssTransformer and JsTransformer classes, then you plug in a set of transformations (choice between debug and pre-minified versions of files, translation code from the intermediate languages, runtime code minification, transformation of relative paths to absolute (only for CSS-code) and code combining). A set of transformations depends on what the modules of Bundle Transformer you have installed and settings you have specified in theWeb.config file.

Also note, that CssMinify and JsMinify was created on the basis of the Microsoft Ajax Minifier. Therefore, as a their replacement you can use minifier-module the BundleTransformer.MicrosoftAjax, which supports a newer version of the Microsoft Ajax Minifier algorithm and allows you to make a more fine-tuning of this algorithm.

Above code can be a bit shorter, if you will use the CustomStyleBundle and CustomScriptBundle classes:

namespace BundleTransformer.Example.Mvc
{
   using System.Web.Optimization;

   using Core.Builders;
   using Core.Bundles;using Core.Orderers;
   using Core.Transformers;

   publicclass BundleConfig
   {
      publicstaticvoid RegisterBundles(BundleCollection bundles)
      {
         bundles.UseCdn = true;

         var nullBuilder = new NullBuilder();
         var nullOrderer = new NullOrderer();

         var commonStylesBundle = newCustomStyleBundle("~/Bundles/CommonStyles");
         commonStylesBundle.Include(
            "~/Content/Fonts.css",
            "~/Content/Site.css",
            "~/Content/BundleTransformer.css",
            "~/AlternativeContent/css/TestCssComponentsPaths.css",
            "~/Content/themes/base/jquery.ui.core.css",
            "~/Content/themes/base/jquery.ui.theme.css",
            "~/Content/themes/base/jquery.ui.resizable.css",
            "~/Content/themes/base/jquery.ui.button.css",
            "~/Content/themes/base/jquery.ui.dialog.css",
            "~/Content/TestTranslators.css",
            "~/Content/less/TestLess.less",
            "~/Content/sass/TestSass.sass",
            "~/Content/scss/TestScss.scss");
         commonStylesBundle.Orderer = nullOrderer;

         bundles.Add(commonStylesBundle);

         var modernizrBundle = newCustomScriptBundle("~/Bundles/Modernizr");
         modernizrBundle.Include("~/Scripts/modernizr-2.*");
         modernizrBundle.Orderer = nullOrderer;

         bundles.Add(modernizrBundle);

         var jQueryBundle = newCustomScriptBundle("~/Bundles/Jquery", 
            "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js");
         jQueryBundle.Include("~/Scripts/jquery-{version}.js");
         jQueryBundle.Orderer = nullOrderer;
         jQueryBundle.CdnFallbackExpression = "window.jquery";

         bundles.Add(jQueryBundle);

         var commonScriptsBundle = newCustomScriptBundle("~/Bundles/CommonScripts");
         commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js",
            "~/Scripts/jquery-ui-{version}.js",
            "~/Scripts/jquery.validate.js",
            "~/Scripts/jquery.validate.unobtrusive.js",
            "~/Scripts/jquery.unobtrusive-ajax.js",
            "~/Scripts/knockout-2.*",
            "~/Scripts/coffee/TestCoffeeScript.coffee",
            "~/Scripts/coffee/TestLiterateCoffeeScript.litcoffee",
            "~/Scripts/coffee/TestCoffeeScriptMarkdown.coffee.md",
            "~/Scripts/ts/TranslatorBadge.ts",
            "~/Scripts/ts/ColoredTranslatorBadge.ts",
            "~/Scripts/ts/TestTypeScript.ts");
         commonScriptsBundle.Orderer = nullOrderer;

         bundles.Add(commonScriptsBundle);
         …
      }
   }
}

CustomStyleBundle and CustomScriptBundleсlasses are analogues of the StyleBundle and ScriptBundle classes, oriented to work with the Bundle Transformer.CustomStyleBundle class uses CssTransformer as transformation by default and NullBuilder as builder by default, and CustomScriptBundle class uses JsTransformer as transformation by default andNullBuilder as builder by default.

Example of _Layout.cshtml:

<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"/><title>@ViewBag.Title - Bundle Transformer Example MVC Application</title><linkhref="~/favicon.ico"rel="shortcut icon"type="image/x-icon"/><metaname="viewport"content="width=device-width"/>
      @Styles.Render("~/Bundles/CommonStyles")
      @Scripts.Render("~/Bundles/Modernizr")
   </head><body>
      ...
      @Scripts.Render("~/Bundles/Jquery")
      @Scripts.Render("~/Bundles/CommonScripts")
      @RenderSection("scripts", required: false)
   </body></html>

When adding assets from directory, you can specify patterns for exclusion of unnecessary files (ignorePatterns parameter):

var jqueryUiStylesDirectoryBundle = new Bundle("~/Bundles/JqueryUiStylesDirectory");
jqueryUiStylesDirectoryBundle.Builder = nullBuilder;
jqueryUiStylesDirectoryBundle.IncludeDirectory("~/Content/themes/base/", "*.css");
jqueryUiStylesDirectoryBundle.Transforms.Add(new CssTransformer(
   new[] { "*.all.css", "jquery.ui.base.css" }));

bundles.Add(jqueryUiStylesDirectoryBundle);

var scriptsDirectoryBundle = new Bundle("~/Bundles/ScriptsDirectory");
scriptsDirectoryBundle.Builder = nullBuilder;
scriptsDirectoryBundle.IncludeDirectory("~/Scripts/", "*.js", true);
scriptsDirectoryBundle.Transforms.Add(new JsTransformer(
   new[] { "*.all.js", "references.js" }));

bundles.Add(scriptsDirectoryBundle);

Configuration settings

Starting with version 1.2.1 Beta from the Web.config file has been removed settings of Bundle Transformer, which were default settings. Current settings of Bundle Transformer equivalent to following version of theWeb.config file:

 

<?xmlversion="1.0"encoding="utf-8"?><configuration><configSections><!-- Declaration of Bundle Transformer configuration section group --><sectionGroupname="bundleTransformer"><sectionname="core"type="BundleTransformer.Core.Configuration.CoreSettings, BundleTransformer.Core"/><sectionname="less"type="BundleTransformer.Less.Configuration.LessSettings, BundleTransformer.Less"/><sectionname="sassAndScss"type="BundleTransformer.SassAndScss.Configuration.SassAndScssSettings, BundleTransformer.SassAndScss"/><sectionname="typeScript"type="BundleTransformer.TypeScript.Configuration.TypeScriptSettings, BundleTransformer.TypeScript"/><sectionname="coffeeScript"type="BundleTransformer.CoffeeScript.Configuration.CoffeeScriptSettings, BundleTransformer.CoffeeScript"/><sectionname="microsoftAjax"type="BundleTransformer.MicrosoftAjax.Configuration.MicrosoftAjaxSettings, BundleTransformer.MicrosoftAjax"/><sectionname="yui"type="BundleTransformer.Yui.Configuration.YuiSettings, BundleTransformer.Yui"/><sectionname="closure"type="BundleTransformer.Closure.Configuration.ClosureSettings, BundleTransformer.Closure"/><sectionname="uglify"type="BundleTransformer.UglifyJs.Configuration.UglifySettings, BundleTransformer.UglifyJs"/><sectionname="packer"type="BundleTransformer.Packer.Configuration.PackerSettings, BundleTransformer.Packer"/><sectionname="csso"type="BundleTransformer.Csso.Configuration.CssoSettings, BundleTransformer.Csso"/></sectionGroup><!-- /Declaration of Bundle Transformer configuration section group --></configSections><system.web><httpHandlers><!-- Declaration of Bundle Transformer HTTP-handlers --><addpath="*.less"verb="GET"type="BundleTransformer.Less.HttpHandlers.LessAssetHandler, BundleTransformer.Less"/><addpath="*.sass"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"/><addpath="*.scss"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"/><addpath="*.coffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"/><addpath="*.litcoffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"/><addpath="*.coffee.md"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"/><addpath="*.ts"verb="GET"type="BundleTransformer.TypeScript.HttpHandlers.TypeScriptAssetHandler, BundleTransformer.TypeScript"/><!-- /Declaration of Bundle Transformer HTTP-handlers --></httpHandlers></system.web><system.webServer><handlers><!-- Declaration of Bundle Transformer HTTP-handlers --><addname="LessAssetHandler"path="*.less"verb="GET"type="BundleTransformer.Less.HttpHandlers.LessAssetHandler, BundleTransformer.Less"resourceType="File" preCondition=""/><addname="SassAssetHandler"path="*.sass"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"resourceType="File" preCondition=""/><addname="ScssAssetHandler"path="*.scss"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"resourceType="File" preCondition=""/><addname="CoffeeScriptAssetHandler"path="*.coffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"resourceType="File" preCondition=""/><addname="LiterateCoffeeScriptAssetHandler"path="*.litcoffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"resourceType="File" preCondition=""/><addname="CoffeeScriptMarkdownAssetHandler"path="*.coffee.md"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"resourceType="File" preCondition=""/><addname="TypeScriptAssetHandler"path="*.ts"verb="GET"type="BundleTransformer.TypeScript.HttpHandlers.TypeScriptAssetHandler, BundleTransformer.TypeScript"resourceType="File" preCondition=""/><!-- /Declaration of Bundle Transformer HTTP-handlers --></handlers></system.webServer><!-- Bundle Transformer configuration settings --><bundleTransformerxmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"><coreenableTracing="false"jsFilesWithMicrosoftStyleExtensions="MicrosoftAjax.js,MicrosoftMvcAjax.js, MicrosoftMvcValidation.js,knockout-$version$.js"useEnableOptimizationsProperty="true"><cssdefaultMinifier="NullMinifier"usePreMinifiedFiles="true"disableNativeCssRelativePathTransformation="false"><minifiers><addname="NullMinifier"type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core"/><addname="MicrosoftAjaxCssMinifier"type="BundleTransformer.MicrosoftAjax.Minifiers.MicrosoftAjaxCssMinifier, BundleTransformer.MicrosoftAjax"/><addname="YuiCssMinifier"type="BundleTransformer.Yui.Minifiers.YuiCssMinifier, BundleTransformer.Yui"/><addname="KryzhanovskyCssMinifier"type="BundleTransformer.Csso.Minifiers.KryzhanovskyCssMinifier, BundleTransformer.Csso"/><addname="WgCssMinifier"type="BundleTransformer.WG.Minifiers.WgCssMinifier, BundleTransformer.WG"/></minifiers><translators><addname="NullTranslator"type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core"enabled="false"/><addname="LessTranslator"type="BundleTransformer.Less.Translators.LessTranslator, BundleTransformer.Less"enabled="true"/><addname="SassAndScssTranslator"type="BundleTransformer.SassAndScss.Translators.SassAndScssTranslator, BundleTransformer.SassAndScss"enabled="true"/></translators></css><jsdefaultMinifier="NullMinifier"usePreMinifiedFiles="true"><minifiers><addname="NullMinifier"type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core"/><addname="MicrosoftAjaxJsMinifier"type="BundleTransformer.MicrosoftAjax.Minifiers.MicrosoftAjaxJsMinifier, BundleTransformer.MicrosoftAjax"/><addname="YuiJsMinifier"type="BundleTransformer.Yui.Minifiers.YuiJsMinifier, BundleTransformer.Yui"/><addname="ClosureRemoteJsMinifier"type="BundleTransformer.Closure.Minifiers.ClosureRemoteJsMinifier, BundleTransformer.Closure"/><addname="ClosureLocalJsMinifier"type="BundleTransformer.Closure.Minifiers.ClosureLocalJsMinifier, BundleTransformer.Closure"/><addname="CrockfordJsMinifier"type="BundleTransformer.JsMin.Minifiers.CrockfordJsMinifier, BundleTransformer.JsMin"/><addname="UglifyJsMinifier"type="BundleTransformer.UglifyJs.Minifiers.UglifyJsMinifier, BundleTransformer.UglifyJs"/><addname="EdwardsJsMinifier"type="BundleTransformer.Packer.Minifiers.EdwardsJsMinifier, BundleTransformer.Packer"/></minifiers><translators><addname="NullTranslator"type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core"enabled="false"/><addname="CoffeeScriptTranslator"type="BundleTransformer.CoffeeScript.Translators.CoffeeScriptTranslator, BundleTransformer.CoffeeScript"enabled="true"/><addname="TypeScriptTranslator"type="BundleTransformer.TypeScript.Translators.TypeScriptTranslator, BundleTransformer.TypeScript"enabled="true"/></translators></js></core><lessuseNativeMinification="false"ieCompat="true"strictMath="false"strictUnits="false"dumpLineNumbers="None"/><sassAndScssuseNativeMinification="false"lineNumbers="false"traceSelectors="false"debugInfo="false"/><coffeeScriptbare="true"/><typeScriptuseDefaultLib="true"propagateEnumConstants="false"removeComments="false"allowAutomaticSemicolonInsertion="true"allowBool="false"noImplicitAny="false"codeGenTarget="EcmaScript3"/><microsoftAjax><cssallowEmbeddedAspNetBlocks="false"blocksStartOnSameLine="NewLine"ignoreAllErrors="false"ignoreErrorList="" indentSize="4"lineBreakThreshold="2147482647"outputMode="SingleLine"preprocessorDefineList="" termSemicolons="false"colorNames="Strict"commentMode="Important"minifyExpressions="true"severity="0"/><jsallowEmbeddedAspNetBlocks="false"blocksStartOnSameLine="NewLine"ignoreAllErrors="false"ignoreErrorList="" indentSize="4"lineBreakThreshold="2147482647"outputMode="SingleLine"preprocessorDefineList="" termSemicolons="false"alwaysEscapeNonAscii="false"collapseToLiteral="true"constStatementsMozilla="false"debugLookupList="Debug,$Debug,WAssert,Msn.Debug,Web.Debug"errorIfNotInlineSafe="false"evalLiteralExpressions="true"evalTreatment="Ignore"ignoreConditionalCompilation="false"ignorePreprocessorDefines="false"inlineSafeStrings="true"knownGlobalNamesList="" localRenaming="CrunchAll"macSafariQuirks="true"manualRenamesProperties="true"noAutoRenameList="$super"preserveFunctionNames="false"preserveImportantComments="true"quoteObjectLiteralProperties="false"removeFunctionExpressionNames="true"removeUnneededCode="true"renamePairs="" reorderScopeDeclarations="true"strictMode="false"stripDebugStatements="true"severity="0"/></microsoftAjax><yui><csscompressionType="Standard"removeComments="true"lineBreakPosition="-1"/><jscompressionType="Standard"obfuscateJavascript="true"preserveAllSemicolons="false"disableOptimizations="false"ignoreEval="false"severity="0"lineBreakPosition="-1"encoding="UTF8"threadCulture="en-us"/></yui><closure><js><remoteclosureCompilerServiceApiUrl="http://closure-compiler.appspot.com/compile"compilationLevel="Simple"prettyPrint="false"excludeDefaultExterns="false"severity="0"/><localjavaVirtualMachinePath="" closureCompilerApplicationPath=""compilationLevel="Simple"prettyPrint="false"languageSpec="EcmaScript3"thirdParty="true"processJqueryPrimitives="false"processClosurePrimitives="false"severity="0"/></js></closure><uglify><jsscrewIe8="false"severity="0"><parsingstrict="false"/><compression compress="true" sequences="true" propertiesDotNotation="true"
          deadCode="true" dropDebugger="true" unsafe="false"
          conditionals="true" comparisons="true" evaluate="true"
          booleans="true" loops="true" unused="true"
          hoistFunctions="true" hoistVars="false" ifReturn="true"
          joinVars="true" cascade="true"
          globalDefinitions="" />
        <manglingmangle="true"except="" eval="false"sort="false"topLevel="false"/><codeGenerationbeautify="false"indentLevel="4"indentStart="0"quoteKeys="false"spaceColon="true"asciiOnly="false"inlineScript="false"width="80"maxLineLength="32000"ieProof="true"bracketize="false"semicolons="true"comments="false"preserveLine="false"/></js></uglify><packer><jsshrinkVariables="true"base62Encode="false"/></packer><csso><cssdisableRestructuring="false"/></csso></bundleTransformer><!-- /Bundle Transformer configuration settings --></configuration>

 

Also since version 1.2.1 Beta in the Web.config file for thebundleTransformer configuration section was implemented support for IntelliSense (implemented by using XML Schema, which is located in theBundleTransformer.Configuration.xsd file):

IntelliSense support when editing the  bundleTransformer configuration section in the Web.config file

Translators

Bundle Transformer: LESS and Bundle Transformer: LESS Lite

BundleTransformer.Less andBundleTransformer.LessLite contains translator-adapterLessTranslator (supports LESS version 1.4.2). This adapter makes translation of LESS-code to CSS-code. Also contains HTTP-handlerLessAssetHandler, which is responsible for text output of translated LESS-asset.

Bundle Transformer: Sass and SCSS

BundleTransformer.SassAndScss contains translator-adapterSassAndScssTranslator (based on code of theSassAndCoffee.Ruby library version 2.0.2.0 withRobert Wintermoose's Update and supportsSass version 3.2.10). This adapter makes translation of Sass- and SCSS-code to CSS-code. Also contains HTTP-handlerSassAndScssAssetHandler, which is responsible for text output of translated Sass- or SCSS-asset.

Bundle Transformer: CoffeeScript

BundleTransformer.CoffeeScript contains translator-adapterCoffeeScriptTranslator (supports CoffeeScript version 1.6.3). This adapter makes translation of CoffeeScript-code to JS-code. Also contains HTTP-handlerCoffeeScriptAssetHandler, which is responsible for text output of translated CoffeeScript-asset.

Bundle Transformer: TypeScript

BundleTransformer.TypeScript contains translator-adapterTypeScriptTranslator (supports TypeScript version 0.9.1.1). This adapter makes translation of TypeScript-code to JS-code. Also contains HTTP-handlerTypeScriptAssetHandler, which is responsible for text output of translated TypeScript-asset.

When using the types declared in other files, you need add to code the references to these files by using the "reference" comments, as shown in the following example:

/// <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>returnthis.$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>returnthis.$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);
	}
}

Minifiers

Bundle Transformer: Microsoft Ajax

BundleTransformer.MicrosoftAjax contains 2 minifier-adapters:MicrosoftAjaxCssMinifier (for minification of CSS-code) andMicrosoftAjaxJsMinifier (for minification of JS-code). These adapters perform minification using theMicrosoft Ajax Minifier.

To make MicrosoftAjaxCssMinifier is the default CSS-minifier andMicrosoftAjaxJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In defaultMinifier attribute of \configuration\bundleTransformer\core\css element must be set value equal toMicrosoftAjaxCssMinifier, and in same attribute of\configuration\bundleTransformer\core\js element -MicrosoftAjaxJsMinifier.

Bundle Transformer: YUI

BundleTransformer.Yui contains 2 minifier-adapters:YuiCssMinifier (for minification of CSS-code) andYuiJsMinifier (for minification of JS-code). These adapters perform minification using theYUI Compressor for .NET.

To make YuiCssMinifier is the default CSS-minifier andYuiJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In defaultMinifier attribute of \configuration\bundleTransformer\core\css element must be set value equal toYuiCssMinifier, and in same attribute of\configuration\bundleTransformer\core\js element -YuiJsMinifier.

Bundle Transformer: Closure

BundleTransformer.Closure contains 2 minifier-adapters for minification of JS-code:ClosureRemoteJsMinifier and ClosureLocalJsMinifier. ClosureRemoteJsMinifier is based on the Google Closure Compiler Service API and requires a permanent connection to Internet.ClosureLocalJsMinifier is based on the Google Closure Compiler Application and for their work requires latest version of filecompiler.jar.

To make ClosureRemoteJsMinifier orClosureLocalJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toClosureRemoteJsMinifier or ClosureLocalJsMinifier.

To start using ClosureLocalJsMinifier need to make the following preliminary work:

  1. On your computer must be installed Java 6 or higher. Latest version of Java can be downloaded at the following URL -http://www.java.com/download/.
  2. You need to download latest version of the Google Closure Compiler Application, which is located on the URL - http://closure-compiler.googlecode.com/files/compiler-latest.zip.
  3. Unzip the downloaded archive and copy the file compiler.jar in some directory on disk of your computer.
  4. In Web.config file find the configuration/bundleTransformer/closure/local element, then set the javaVirtualMachinePath attribute to a value equal to the path to executable file of the Java Virtual Machine (java.exe), and set theclosureCompilerApplicationPath attribute to a value equal to the path to JAR-file of the Google Closure Compiler Application (compiler.jar).

Bundle Transformer: JSMin

BundleTransformer.JsMin contains one minifier-adapter for minification of JS-code -CrockfordJsMinifier. CrockfordJsMinifier is based on the C# port of Douglas Crockford's JSMin (version of May 22 2007).

To make CrockfordJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toCrockfordJsMinifier.

Bundle Transformer: UglifyJS

BundleTransformer.UglifyJs contains one minifier-adapter for minification of JS-code -UglifyJsMinifier. UglifyJsMinifier is based on the Mihai Bazon's UglifyJS version 2.3.6.

To make UglifyJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toUglifyJsMinifier.

Bundle Transformer: Packer

BundleTransformer.Packer contains one minifier-adapter for minification of JS-code -EdwardsJsMinifier. EdwardsJsMinifier is based on the Dean Edwards' Packer version 3.0.

To make EdwardsJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toEdwardsJsMinifier.

Bundle Transformer: CSSO

BundleTransformer.Csso contains one minifier-adapter for minification of CSS-code -KryzhanovskyCssMinifier. KryzhanovskyCssMinifier is based on the Sergey Kryzhanovsky's CSSO (CSS Optimizer) version 1.3.7.

As a JS-engine is used the Noesis Javascript .NET. BundleTransformer.Csso in runtime itself switches to correct version of the Noesis Javascript .NET (assemblies for different platforms are located in theApp_Data/Noesis.Javascript directory). For correct working of the Noesis Javascript .NET require assembliesmsvcp100.dll and msvcr100.dll from the Microsoft Visual C++ 2010.

If in your system does not assemblies msvcp100.dll andmsvcr100.dll, then download and install the Microsoft Visual C++ 2010 Redistributable Package (x86, x64)

To make KryzhanovskyCssMinifier is the default CSS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\css element must be set value equal toKryzhanovskyCssMinifier.

Bundle Transformer: WebGrease

BundleTransformer.WG contains one minifier-adapter for minification of CSS-code -WgCssMinifier. WgCssMinifier is based on the WebGrease Semantic CSS-minifier version 1.3.0.

To make WgCssMinifier is the default CSS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\css element must be set value equal toWgCssMinifier.

Updated Wiki: Documentation

Updated Wiki: Bundle Transformer 1.7.27

$
0
0

Bundle Transformer 1.7.27

Bundle Transformer logo

Before you read

Before you read the documentation for Bundle Transformer, i recommend to read chapter“Bundling and Minification” of the ASP.NET MVC 4 tutorial and Howard Dierking's article «New Web Optimization Pre-Release Package on NuGet». Also recommend you read the Rick Anderson's posts about using of Microsoft ASP.NET Web Optimization Framework with Web Forms and Web Pages.

Bundle Transformer does not minify HTML markup, embedded/inline styles and scripts. For these purposes it is recommended to useWebMarkupMin.

Examples of usage

Recommend to move the code, that is responsible for the registration of assets, from theGlobal.asax file in the BundleConfig.cs file and place this file in the App_Start directory. In the Global.asax file you need to leave only the code calling a method of classBundleConfig:

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace BundleTransformer.Example.Mvc
{
   publicclass MvcApplication : System.Web.HttpApplication
   {
      protectedvoid Application_Start()
      {
         AreaRegistration.RegisterAllAreas();

         FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
         RouteConfig.RegisterRoutes(RouteTable.Routes);
         BundleConfig.RegisterBundles(BundleTable.Bundles);
      }
   }
}

Here an example of registration of assets and configuration of their processing with the help ofCssTransformer and JsTransformer in the BundleConfig.cs file:

namespace BundleTransformer.Example.Mvc
{
   using System.Web.Optimization;

   using Core.Builders;using Core.Orderers;using Core.Transformers;publicclass BundleConfig
   {
      publicstaticvoid RegisterBundles(BundleCollection bundles)
      {
         bundles.UseCdn = true;

         var nullBuilder = new NullBuilder();var cssTransformer = new CssTransformer();var jsTransformer = new JsTransformer();var nullOrderer = new NullOrderer();

         var commonStylesBundle = new Bundle("~/Bundles/CommonStyles");
         commonStylesBundle.Include(
            "~/Content/Fonts.css",
            "~/Content/Site.css",
            "~/Content/BundleTransformer.css",
            "~/AlternativeContent/css/TestCssComponentsPaths.css",
            "~/Content/themes/base/jquery.ui.core.css",
            "~/Content/themes/base/jquery.ui.theme.css",
            "~/Content/themes/base/jquery.ui.resizable.css",
            "~/Content/themes/base/jquery.ui.button.css",
            "~/Content/themes/base/jquery.ui.dialog.css",
            "~/Content/TestTranslators.css",
            "~/Content/less/TestLess.less",
            "~/Content/sass/TestSass.sass",
            "~/Content/scss/TestScss.scss");
         commonStylesBundle.Builder = nullBuilder;
         commonStylesBundle.Transforms.Add(cssTransformer);
         commonStylesBundle.Orderer = nullOrderer;

         bundles.Add(commonStylesBundle);

         var modernizrBundle = new Bundle("~/Bundles/Modernizr");
         modernizrBundle.Include("~/Scripts/modernizr-2.*");
         modernizrBundle.Builder = nullBuilder;
         modernizrBundle.Transforms.Add(jsTransformer);
         modernizrBundle.Orderer = nullOrderer;

         bundles.Add(modernizrBundle);

         var jQueryBundle = new Bundle("~/Bundles/Jquery", 
            "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js");
         jQueryBundle.Include("~/Scripts/jquery-{version}.js");
         jQueryBundle.Builder = nullBuilder;
         jQueryBundle.Transforms.Add(jsTransformer);
         jQueryBundle.Orderer = nullOrderer;
         jQueryBundle.CdnFallbackExpression = "window.jquery";

         bundles.Add(jQueryBundle);

         var commonScriptsBundle = new Bundle("~/Bundles/CommonScripts");
         commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js",
            "~/Scripts/jquery-ui-{version}.js",
            "~/Scripts/jquery.validate.js",
            "~/Scripts/jquery.validate.unobtrusive.js",
            "~/Scripts/jquery.unobtrusive-ajax.js",
            "~/Scripts/knockout-2.*",
            "~/Scripts/coffee/TestCoffeeScript.coffee",
            "~/Scripts/coffee/TestLiterateCoffeeScript.litcoffee",
            "~/Scripts/coffee/TestCoffeeScriptMarkdown.coffee.md",
            "~/Scripts/ts/TranslatorBadge.ts",
            "~/Scripts/ts/ColoredTranslatorBadge.ts",
            "~/Scripts/ts/TestTypeScript.ts");
         commonStylesBundle.Builder = nullBuilder;
         commonScriptsBundle.Transforms.Add(jsTransformer);
         commonScriptsBundle.Orderer = nullOrderer;

         bundles.Add(commonScriptsBundle);
         …
      }
   }
}

NullBuilder class is responsible for prevention of early applying of the item transformations and combining of code.CssTransformer and JsTransformer classes produce processing of stylesheets and scripts. NullOrderer class disables the built-in sorting mechanism and save assets sorted in the order they are declared.

Bundle Transformer is not recommended to use together with the StyleBundle and ScriptBundle classes, because these classes already contain transformations (instances of the built-in minifier-transformations:CssMinify and JsMinify). If you are in this situation plug the Bundle Transformer minifiers-modules (for example, BundleTransformer.MicrosoftAjax or BundleTransformer.Yui), then it will lead to a double minification of code. In addition, minifier-modules of the Bundle Transformer do not produce the re-minification of code of pre-minified assets (for example, files with the extension*.min.js and *.min.css), that speeds up the process of optimization.

You also need to understand that when you plug instances of CssTransformer and JsTransformer classes, then you plug in a set of transformations (choice between debug and pre-minified versions of files, translation code from the intermediate languages, runtime code minification, transformation of relative paths to absolute (only for CSS-code) and code combining). A set of transformations depends on what the modules of Bundle Transformer you have installed and settings you have specified in theWeb.config file.

Also note, that CssMinify and JsMinify was created on the basis of the Microsoft Ajax Minifier. Therefore, as a their replacement you can use minifier-module the BundleTransformer.MicrosoftAjax, which supports a newer version of the Microsoft Ajax Minifier algorithm and allows you to make a more fine-tuning of this algorithm.

Above code can be a bit shorter, if you will use the CustomStyleBundle and CustomScriptBundle classes:

namespace BundleTransformer.Example.Mvc
{
   using System.Web.Optimization;

   using Core.Builders;
   using Core.Bundles;using Core.Orderers;
   using Core.Transformers;

   publicclass BundleConfig
   {
      publicstaticvoid RegisterBundles(BundleCollection bundles)
      {
         bundles.UseCdn = true;

         var nullBuilder = new NullBuilder();
         var nullOrderer = new NullOrderer();

         var commonStylesBundle = newCustomStyleBundle("~/Bundles/CommonStyles");
         commonStylesBundle.Include(
            "~/Content/Fonts.css",
            "~/Content/Site.css",
            "~/Content/BundleTransformer.css",
            "~/AlternativeContent/css/TestCssComponentsPaths.css",
            "~/Content/themes/base/jquery.ui.core.css",
            "~/Content/themes/base/jquery.ui.theme.css",
            "~/Content/themes/base/jquery.ui.resizable.css",
            "~/Content/themes/base/jquery.ui.button.css",
            "~/Content/themes/base/jquery.ui.dialog.css",
            "~/Content/TestTranslators.css",
            "~/Content/less/TestLess.less",
            "~/Content/sass/TestSass.sass",
            "~/Content/scss/TestScss.scss");
         commonStylesBundle.Orderer = nullOrderer;

         bundles.Add(commonStylesBundle);

         var modernizrBundle = newCustomScriptBundle("~/Bundles/Modernizr");
         modernizrBundle.Include("~/Scripts/modernizr-2.*");
         modernizrBundle.Orderer = nullOrderer;

         bundles.Add(modernizrBundle);

         var jQueryBundle = newCustomScriptBundle("~/Bundles/Jquery", 
            "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js");
         jQueryBundle.Include("~/Scripts/jquery-{version}.js");
         jQueryBundle.Orderer = nullOrderer;
         jQueryBundle.CdnFallbackExpression = "window.jquery";

         bundles.Add(jQueryBundle);

         var commonScriptsBundle = newCustomScriptBundle("~/Bundles/CommonScripts");
         commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js",
            "~/Scripts/jquery-ui-{version}.js",
            "~/Scripts/jquery.validate.js",
            "~/Scripts/jquery.validate.unobtrusive.js",
            "~/Scripts/jquery.unobtrusive-ajax.js",
            "~/Scripts/knockout-2.*",
            "~/Scripts/coffee/TestCoffeeScript.coffee",
            "~/Scripts/coffee/TestLiterateCoffeeScript.litcoffee",
            "~/Scripts/coffee/TestCoffeeScriptMarkdown.coffee.md",
            "~/Scripts/ts/TranslatorBadge.ts",
            "~/Scripts/ts/ColoredTranslatorBadge.ts",
            "~/Scripts/ts/TestTypeScript.ts");
         commonScriptsBundle.Orderer = nullOrderer;

         bundles.Add(commonScriptsBundle);
         …
      }
   }
}

CustomStyleBundle and CustomScriptBundleсlasses are analogues of the StyleBundle and ScriptBundle classes, oriented to work with the Bundle Transformer.CustomStyleBundle class uses CssTransformer as transformation by default and NullBuilder as builder by default, and CustomScriptBundle class uses JsTransformer as transformation by default andNullBuilder as builder by default.

Example of _Layout.cshtml:

<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"/><title>@ViewBag.Title - Bundle Transformer Example MVC Application</title><linkhref="~/favicon.ico"rel="shortcut icon"type="image/x-icon"/><metaname="viewport"content="width=device-width"/>
      @Styles.Render("~/Bundles/CommonStyles")
      @Scripts.Render("~/Bundles/Modernizr")
   </head><body>
      ...
      @Scripts.Render("~/Bundles/Jquery")
      @Scripts.Render("~/Bundles/CommonScripts")
      @RenderSection("scripts", required: false)
   </body></html>

When adding assets from directory, you can specify patterns for exclusion of unnecessary files (ignorePatterns parameter):

var jqueryUiStylesDirectoryBundle = new Bundle("~/Bundles/JqueryUiStylesDirectory");
jqueryUiStylesDirectoryBundle.Builder = nullBuilder;
jqueryUiStylesDirectoryBundle.IncludeDirectory("~/Content/themes/base/", "*.css");
jqueryUiStylesDirectoryBundle.Transforms.Add(new CssTransformer(
   new[] { "*.all.css", "jquery.ui.base.css" }));

bundles.Add(jqueryUiStylesDirectoryBundle);

var scriptsDirectoryBundle = new Bundle("~/Bundles/ScriptsDirectory");
scriptsDirectoryBundle.Builder = nullBuilder;
scriptsDirectoryBundle.IncludeDirectory("~/Scripts/", "*.js", true);
scriptsDirectoryBundle.Transforms.Add(new JsTransformer(
   new[] { "*.all.js", "references.js" }));

bundles.Add(scriptsDirectoryBundle);

Configuration settings

Starting with version 1.2.1 Beta from the Web.config file has been removed settings of Bundle Transformer, which were default settings. Current settings of Bundle Transformer equivalent to following version of theWeb.config file:

<?xmlversion="1.0"encoding="utf-8"?><configuration><configSections><!-- Declaration of Bundle Transformer configuration section group --><sectionGroupname="bundleTransformer"><sectionname="core"type="BundleTransformer.Core.Configuration.CoreSettings, BundleTransformer.Core"/><sectionname="less"type="BundleTransformer.Less.Configuration.LessSettings, BundleTransformer.Less"/><sectionname="sassAndScss"type="BundleTransformer.SassAndScss.Configuration.SassAndScssSettings, BundleTransformer.SassAndScss"/><sectionname="typeScript"type="BundleTransformer.TypeScript.Configuration.TypeScriptSettings, BundleTransformer.TypeScript"/><sectionname="coffeeScript"type="BundleTransformer.CoffeeScript.Configuration.CoffeeScriptSettings, BundleTransformer.CoffeeScript"/><sectionname="microsoftAjax"type="BundleTransformer.MicrosoftAjax.Configuration.MicrosoftAjaxSettings, BundleTransformer.MicrosoftAjax"/><sectionname="yui"type="BundleTransformer.Yui.Configuration.YuiSettings, BundleTransformer.Yui"/><sectionname="closure"type="BundleTransformer.Closure.Configuration.ClosureSettings, BundleTransformer.Closure"/><sectionname="uglify"type="BundleTransformer.UglifyJs.Configuration.UglifySettings, BundleTransformer.UglifyJs"/><sectionname="packer"type="BundleTransformer.Packer.Configuration.PackerSettings, BundleTransformer.Packer"/><sectionname="csso"type="BundleTransformer.Csso.Configuration.CssoSettings, BundleTransformer.Csso"/></sectionGroup><!-- /Declaration of Bundle Transformer configuration section group --></configSections><system.web><httpHandlers><!-- Declaration of Bundle Transformer HTTP-handlers --><addpath="*.less"verb="GET"type="BundleTransformer.Less.HttpHandlers.LessAssetHandler, BundleTransformer.Less"/><addpath="*.sass"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"/><addpath="*.scss"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"/><addpath="*.coffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"/><addpath="*.litcoffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"/><addpath="*.coffee.md"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"/><addpath="*.ts"verb="GET"type="BundleTransformer.TypeScript.HttpHandlers.TypeScriptAssetHandler, BundleTransformer.TypeScript"/><!-- /Declaration of Bundle Transformer HTTP-handlers --></httpHandlers></system.web><system.webServer><handlers><!-- Declaration of Bundle Transformer HTTP-handlers --><addname="LessAssetHandler"path="*.less"verb="GET"type="BundleTransformer.Less.HttpHandlers.LessAssetHandler, BundleTransformer.Less"resourceType="File" preCondition=""/><addname="SassAssetHandler"path="*.sass"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"resourceType="File" preCondition=""/><addname="ScssAssetHandler"path="*.scss"verb="GET"type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss"resourceType="File" preCondition=""/><addname="CoffeeScriptAssetHandler"path="*.coffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"resourceType="File" preCondition=""/><addname="LiterateCoffeeScriptAssetHandler"path="*.litcoffee"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"resourceType="File" preCondition=""/><addname="CoffeeScriptMarkdownAssetHandler"path="*.coffee.md"verb="GET"type="BundleTransformer.CoffeeScript.HttpHandlers.CoffeeScriptAssetHandler, BundleTransformer.CoffeeScript"resourceType="File" preCondition=""/><addname="TypeScriptAssetHandler"path="*.ts"verb="GET"type="BundleTransformer.TypeScript.HttpHandlers.TypeScriptAssetHandler, BundleTransformer.TypeScript"resourceType="File" preCondition=""/><!-- /Declaration of Bundle Transformer HTTP-handlers --></handlers></system.webServer><!-- Bundle Transformer configuration settings --><bundleTransformerxmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"><coreenableTracing="false"jsFilesWithMicrosoftStyleExtensions="MicrosoftAjax.js,MicrosoftMvcAjax.js, MicrosoftMvcValidation.js,knockout-$version$.js"useEnableOptimizationsProperty="true"><cssdefaultMinifier="NullMinifier"usePreMinifiedFiles="true"disableNativeCssRelativePathTransformation="false"><minifiers><addname="NullMinifier"type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core"/><addname="MicrosoftAjaxCssMinifier"type="BundleTransformer.MicrosoftAjax.Minifiers.MicrosoftAjaxCssMinifier, BundleTransformer.MicrosoftAjax"/><addname="YuiCssMinifier"type="BundleTransformer.Yui.Minifiers.YuiCssMinifier, BundleTransformer.Yui"/><addname="KryzhanovskyCssMinifier"type="BundleTransformer.Csso.Minifiers.KryzhanovskyCssMinifier, BundleTransformer.Csso"/><addname="WgCssMinifier"type="BundleTransformer.WG.Minifiers.WgCssMinifier, BundleTransformer.WG"/></minifiers><translators><addname="NullTranslator"type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core"enabled="false"/><addname="LessTranslator"type="BundleTransformer.Less.Translators.LessTranslator, BundleTransformer.Less"enabled="true"/><addname="SassAndScssTranslator"type="BundleTransformer.SassAndScss.Translators.SassAndScssTranslator, BundleTransformer.SassAndScss"enabled="true"/></translators></css><jsdefaultMinifier="NullMinifier"usePreMinifiedFiles="true"><minifiers><addname="NullMinifier"type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core"/><addname="MicrosoftAjaxJsMinifier"type="BundleTransformer.MicrosoftAjax.Minifiers.MicrosoftAjaxJsMinifier, BundleTransformer.MicrosoftAjax"/><addname="YuiJsMinifier"type="BundleTransformer.Yui.Minifiers.YuiJsMinifier, BundleTransformer.Yui"/><addname="ClosureRemoteJsMinifier"type="BundleTransformer.Closure.Minifiers.ClosureRemoteJsMinifier, BundleTransformer.Closure"/><addname="ClosureLocalJsMinifier"type="BundleTransformer.Closure.Minifiers.ClosureLocalJsMinifier, BundleTransformer.Closure"/><addname="CrockfordJsMinifier"type="BundleTransformer.JsMin.Minifiers.CrockfordJsMinifier, BundleTransformer.JsMin"/><addname="UglifyJsMinifier"type="BundleTransformer.UglifyJs.Minifiers.UglifyJsMinifier, BundleTransformer.UglifyJs"/><addname="EdwardsJsMinifier"type="BundleTransformer.Packer.Minifiers.EdwardsJsMinifier, BundleTransformer.Packer"/></minifiers><translators><addname="NullTranslator"type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core"enabled="false"/><addname="CoffeeScriptTranslator"type="BundleTransformer.CoffeeScript.Translators.CoffeeScriptTranslator, BundleTransformer.CoffeeScript"enabled="true"/><addname="TypeScriptTranslator"type="BundleTransformer.TypeScript.Translators.TypeScriptTranslator, BundleTransformer.TypeScript"enabled="true"/></translators></js></core><lessuseNativeMinification="false"ieCompat="true"strictMath="false"strictUnits="false"dumpLineNumbers="None"/><sassAndScssuseNativeMinification="false"lineNumbers="false"traceSelectors="false"debugInfo="false"/><coffeeScriptbare="true"/><typeScriptuseDefaultLib="true"propagateEnumConstants="false"removeComments="false"allowAutomaticSemicolonInsertion="true"allowBool="false"noImplicitAny="false"codeGenTarget="EcmaScript3"/><microsoftAjax><cssallowEmbeddedAspNetBlocks="false"blocksStartOnSameLine="NewLine"ignoreAllErrors="false"ignoreErrorList="" indentSize="4"lineBreakThreshold="2147482647"outputMode="SingleLine"preprocessorDefineList="" termSemicolons="false"colorNames="Strict"commentMode="Important"minifyExpressions="true"severity="0"/><jsallowEmbeddedAspNetBlocks="false"blocksStartOnSameLine="NewLine"ignoreAllErrors="false"ignoreErrorList="" indentSize="4"lineBreakThreshold="2147482647"outputMode="SingleLine"preprocessorDefineList="" termSemicolons="false"alwaysEscapeNonAscii="false"collapseToLiteral="true"constStatementsMozilla="false"debugLookupList="Debug,$Debug,WAssert,Msn.Debug,Web.Debug"errorIfNotInlineSafe="false"evalLiteralExpressions="true"evalTreatment="Ignore"ignoreConditionalCompilation="false"ignorePreprocessorDefines="false"inlineSafeStrings="true"knownGlobalNamesList="" localRenaming="CrunchAll"macSafariQuirks="true"manualRenamesProperties="true"noAutoRenameList="$super"preserveFunctionNames="false"preserveImportantComments="true"quoteObjectLiteralProperties="false"removeFunctionExpressionNames="true"removeUnneededCode="true"renamePairs="" reorderScopeDeclarations="true"strictMode="false"stripDebugStatements="true"severity="0"/></microsoftAjax><yui><csscompressionType="Standard"removeComments="true"lineBreakPosition="-1"/><jscompressionType="Standard"obfuscateJavascript="true"preserveAllSemicolons="false"disableOptimizations="false"ignoreEval="false"severity="0"lineBreakPosition="-1"encoding="UTF8"threadCulture="en-us"/></yui><closure><js><remoteclosureCompilerServiceApiUrl="http://closure-compiler.appspot.com/compile"compilationLevel="Simple"prettyPrint="false"excludeDefaultExterns="false"severity="0"/><localjavaVirtualMachinePath="" closureCompilerApplicationPath=""compilationLevel="Simple"prettyPrint="false"languageSpec="EcmaScript3"thirdParty="true"processJqueryPrimitives="false"processClosurePrimitives="false"severity="0"/></js></closure><uglify><jsscrewIe8="false"severity="0"><parsingstrict="false"/><compression compress="true" sequences="true" propertiesDotNotation="true"
          deadCode="true" dropDebugger="true" unsafe="false"
          conditionals="true" comparisons="true" evaluate="true"
          booleans="true" loops="true" unused="true"
          hoistFunctions="true" hoistVars="false" ifReturn="true"
          joinVars="true" cascade="true"
          globalDefinitions="" />
        <manglingmangle="true"except="" eval="false"sort="false"topLevel="false"/><codeGenerationbeautify="false"indentLevel="4"indentStart="0"quoteKeys="false"spaceColon="true"asciiOnly="false"inlineScript="false"width="80"maxLineLength="32000"ieProof="true"bracketize="false"semicolons="true"comments="false"preserveLine="false"/></js></uglify><packer><jsshrinkVariables="true"base62Encode="false"/></packer><csso><cssdisableRestructuring="false"/></csso></bundleTransformer><!-- /Bundle Transformer configuration settings --></configuration>

Also since version 1.2.1 Beta in the Web.config file for thebundleTransformer configuration section was implemented support for IntelliSense (implemented by using XML Schema, which is located in theBundleTransformer.Configuration.xsd file):

IntelliSense support when editing the  bundleTransformer configuration section in the Web.config file

Translators

Bundle Transformer: LESS and Bundle Transformer: LESS Lite

BundleTransformer.Less andBundleTransformer.LessLite contains translator-adapterLessTranslator (supports LESS version 1.4.2). This adapter makes translation of LESS-code to CSS-code. Also contains HTTP-handlerLessAssetHandler, which is responsible for text output of translated LESS-asset.

Bundle Transformer: Sass and SCSS

BundleTransformer.SassAndScss contains translator-adapterSassAndScssTranslator (based on code of theSassAndCoffee.Ruby library version 2.0.2.0 withRobert Wintermoose's Update and supportsSass version 3.2.10). This adapter makes translation of Sass- and SCSS-code to CSS-code. Also contains HTTP-handlerSassAndScssAssetHandler, which is responsible for text output of translated Sass- or SCSS-asset.

Bundle Transformer: CoffeeScript

BundleTransformer.CoffeeScript contains translator-adapterCoffeeScriptTranslator (supports CoffeeScript version 1.6.3). This adapter makes translation of CoffeeScript-code to JS-code. Also contains HTTP-handlerCoffeeScriptAssetHandler, which is responsible for text output of translated CoffeeScript-asset.

Bundle Transformer: TypeScript

BundleTransformer.TypeScript contains translator-adapterTypeScriptTranslator (supports TypeScript version 0.9.1.1). This adapter makes translation of TypeScript-code to JS-code. Also contains HTTP-handlerTypeScriptAssetHandler, which is responsible for text output of translated TypeScript-asset.

When using the types declared in other files, you need add to code the references to these files by using the "reference" comments, as shown in the following example:

/// <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>returnthis.$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>returnthis.$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);
	}
}

Minifiers

Bundle Transformer: Microsoft Ajax

BundleTransformer.MicrosoftAjax contains 2 minifier-adapters:MicrosoftAjaxCssMinifier (for minification of CSS-code) andMicrosoftAjaxJsMinifier (for minification of JS-code). These adapters perform minification using theMicrosoft Ajax Minifier.

To make MicrosoftAjaxCssMinifier is the default CSS-minifier andMicrosoftAjaxJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In defaultMinifier attribute of \configuration\bundleTransformer\core\css element must be set value equal toMicrosoftAjaxCssMinifier, and in same attribute of\configuration\bundleTransformer\core\js element -MicrosoftAjaxJsMinifier.

Bundle Transformer: YUI

BundleTransformer.Yui contains 2 minifier-adapters:YuiCssMinifier (for minification of CSS-code) andYuiJsMinifier (for minification of JS-code). These adapters perform minification using theYUI Compressor for .NET.

To make YuiCssMinifier is the default CSS-minifier andYuiJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In defaultMinifier attribute of \configuration\bundleTransformer\core\css element must be set value equal toYuiCssMinifier, and in same attribute of\configuration\bundleTransformer\core\js element -YuiJsMinifier.

Bundle Transformer: Closure

BundleTransformer.Closure contains 2 minifier-adapters for minification of JS-code:ClosureRemoteJsMinifier and ClosureLocalJsMinifier. ClosureRemoteJsMinifier is based on the Google Closure Compiler Service API and requires a permanent connection to Internet.ClosureLocalJsMinifier is based on the Google Closure Compiler Application and for their work requires latest version of filecompiler.jar.

To make ClosureRemoteJsMinifier orClosureLocalJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toClosureRemoteJsMinifier or ClosureLocalJsMinifier.

To start using ClosureLocalJsMinifier need to make the following preliminary work:

  1. On your computer must be installed Java 6 or higher. Latest version of Java can be downloaded at the following URL -http://www.java.com/download/.
  2. You need to download latest version of the Google Closure Compiler Application, which is located on the URL - http://closure-compiler.googlecode.com/files/compiler-latest.zip.
  3. Unzip the downloaded archive and copy the file compiler.jar in some directory on disk of your computer.
  4. In Web.config file find the configuration/bundleTransformer/closure/local element, then set the javaVirtualMachinePath attribute to a value equal to the path to executable file of the Java Virtual Machine (java.exe), and set theclosureCompilerApplicationPath attribute to a value equal to the path to JAR-file of the Google Closure Compiler Application (compiler.jar).

Bundle Transformer: JSMin

BundleTransformer.JsMin contains one minifier-adapter for minification of JS-code -CrockfordJsMinifier. CrockfordJsMinifier is based on the C# port of Douglas Crockford's JSMin (version of May 22 2007).

To make CrockfordJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toCrockfordJsMinifier.

Bundle Transformer: UglifyJS

BundleTransformer.UglifyJs contains one minifier-adapter for minification of JS-code -UglifyJsMinifier. UglifyJsMinifier is based on the Mihai Bazon's UglifyJS version 2.3.6.

To make UglifyJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toUglifyJsMinifier.

Bundle Transformer: Packer

BundleTransformer.Packer contains one minifier-adapter for minification of JS-code -EdwardsJsMinifier. EdwardsJsMinifier is based on the Dean Edwards' Packer version 3.0.

To make EdwardsJsMinifier is the default JS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\js element must be set value equal toEdwardsJsMinifier.

Bundle Transformer: CSSO

BundleTransformer.Csso contains one minifier-adapter for minification of CSS-code -KryzhanovskyCssMinifier. KryzhanovskyCssMinifier is based on the Sergey Kryzhanovsky's CSSO (CSS Optimizer) version 1.3.7.

As a JS-engine is used the Noesis Javascript .NET. BundleTransformer.Csso in runtime itself switches to correct version of the Noesis Javascript .NET (assemblies for different platforms are located in theApp_Data/Noesis.Javascript directory). For correct working of the Noesis Javascript .NET require assembliesmsvcp100.dll and msvcr100.dll from the Microsoft Visual C++ 2010.

If in your system does not assemblies msvcp100.dll andmsvcr100.dll, then download and install the Microsoft Visual C++ 2010 Redistributable Package (x86, x64)

To make KryzhanovskyCssMinifier is the default CSS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\css element must be set value equal toKryzhanovskyCssMinifier.

Bundle Transformer: WebGrease

BundleTransformer.WG contains one minifier-adapter for minification of CSS-code -WgCssMinifier. WgCssMinifier is based on the WebGrease Semantic CSS-minifier version 1.3.0.

To make WgCssMinifier is the default CSS-minifier, you need to make changes to theWeb.config file. In the defaultMinifier attribute of the \configuration\bundleTransformer\core\css element must be set value equal toWgCssMinifier.

Created Unassigned: Dependency on Internet Explorer [52]

$
0
0
We ran into [this issue](https://bundletransformer.codeplex.com/discussions/454495) and were surprised to discover that this component has a dependency on installed IE. This seems like a bad "code smell" since it is (1) unexpected, (2) undocumented and (3) pops an error which is completely misleading.

Can you explain why it is important to use IE in this fashion? I for one do not relish the idea of having it as part of a production-critical application.

Thanks!
Rob (Spamagnet)

Commented Unassigned: Exception when using @media [51]

$
0
0
when you use media queries in the less file, it throws an exception.
Comments: Sure: ``` #someId { @media (min-width: @screen-sm) { .lics { background-color: red; } } } ``` @screen-sm here is a variable from Twitter Bootstrap 3

Commented Unassigned: Dependency on Internet Explorer [52]

$
0
0
We ran into [this issue](https://bundletransformer.codeplex.com/discussions/454495) and were surprised to discover that this component has a dependency on installed IE. This seems like a bad "code smell" since it is (1) unexpected, (2) undocumented and (3) pops an error which is completely misleading.

Can you explain why it is important to use IE in this fashion? I for one do not relish the idea of having it as part of a production-critical application.

Thanks!
Rob (Spamagnet)
Comments: Hello, Spamagnet! Nobody forces you to use the Bundle Transformer. Also nobody prevents you to write a similar library. Good luck!

Closed Unassigned: Dependency on Internet Explorer [52]

$
0
0
We ran into [this issue](https://bundletransformer.codeplex.com/discussions/454495) and were surprised to discover that this component has a dependency on installed IE. This seems like a bad "code smell" since it is (1) unexpected, (2) undocumented and (3) pops an error which is completely misleading.

Can you explain why it is important to use IE in this fashion? I for one do not relish the idea of having it as part of a production-critical application.

Thanks!
Rob (Spamagnet)

Commented Unassigned: Dependency on Internet Explorer [52]

$
0
0
We ran into [this issue](https://bundletransformer.codeplex.com/discussions/454495) and were surprised to discover that this component has a dependency on installed IE. This seems like a bad "code smell" since it is (1) unexpected, (2) undocumented and (3) pops an error which is completely misleading.

Can you explain why it is important to use IE in this fashion? I for one do not relish the idea of having it as part of a production-critical application.

Thanks!
Rob (Spamagnet)
Comments: So you don't have a rationale for this?? OK then. Good luck to you too.

Created Unassigned: Package from NuGet: Less compilation fails with Bootstrap 3 [53]

$
0
0
I intalled the NuGet package for BundleTransformer: LESS today and when I try to make a bundle for bootstrap files, it fails. The code used to make the bundle is the following:

var cssBundle = new Bundle("~/Content/bootstrap") {Builder = new NullBuilder()};
cssBundle.IncludeDirectory("~/Content/bootstrap/", "*.less");
cssBundle.Transforms.Add(new CssTransformer());
bundles.Add(cssBundle);

var jsBundle = new Bundle("~/Script/bootstrap") { Builder = new NullBuilder() };
jsBundle.Include("~/Script/bootstrap/bootstrap.js");
jsBundle.Transforms.Add(new JsTransformer());
bundles.Add(jsBundle);

And I get the next error:

File: /Content/bootstrap/alerts.less
Line number: 10
Column number: 11

Source error:

Line 9: .alert {
Line 10: padding: @alert-padding;
-------------------^

Line 11: margin-bottom: @line-height-computed;

Seems like it not compile well the variables defined in other .less file. Any idea?? I use the last version of Transformer and Bootstrap

Commented Unassigned: Package from NuGet: Less compilation fails with Bootstrap 3 [53]

$
0
0
I intalled the NuGet package for BundleTransformer: LESS today and when I try to make a bundle for bootstrap files, it fails. The code used to make the bundle is the following:

var cssBundle = new Bundle("~/Content/bootstrap") {Builder = new NullBuilder()};
cssBundle.IncludeDirectory("~/Content/bootstrap/", "*.less");
cssBundle.Transforms.Add(new CssTransformer());
bundles.Add(cssBundle);

var jsBundle = new Bundle("~/Script/bootstrap") { Builder = new NullBuilder() };
jsBundle.Include("~/Script/bootstrap/bootstrap.js");
jsBundle.Transforms.Add(new JsTransformer());
bundles.Add(jsBundle);

And I get the next error:

File: /Content/bootstrap/alerts.less
Line number: 10
Column number: 11

Source error:

Line 9: .alert {
Line 10: padding: @alert-padding;
-------------------^

Line 11: margin-bottom: @line-height-computed;

Seems like it not compile well the variables defined in other .less file. Any idea?? I use the last version of Transformer and Bootstrap
Comments: Sorry was my fault, I tried to add all the .less files but I only need to include bootstrap.less. Please close this issue.

Commented Unassigned: Exception when using @media [51]

$
0
0
when you use media queries in the less file, it throws an exception.
Comments: Perhaps the exception is not due to the media query, but due to the import of the variable. The full code is: ``` @import "../../bootstrap3/less/variables.less" #someId { @media (min-width: @screen-sm) { .lics { background-color: red; } } } ``` here is a full exception text: During translation of LESS-code, readed from the file '/Content/css/Download/License.less', to CSS-code syntax error has occurred. See more details: Error type: Parse Message: Unrecognised input File: /Content/css/Download/License.less Line number: 1 Source error: Line 1: @import "/Content/bootstrap3/less/variables.less" Line 2: #download-license {

Closed Unassigned: Package from NuGet: Less compilation fails with Bootstrap 3 [53]

$
0
0
I intalled the NuGet package for BundleTransformer: LESS today and when I try to make a bundle for bootstrap files, it fails. The code used to make the bundle is the following:

var cssBundle = new Bundle("~/Content/bootstrap") {Builder = new NullBuilder()};
cssBundle.IncludeDirectory("~/Content/bootstrap/", "*.less");
cssBundle.Transforms.Add(new CssTransformer());
bundles.Add(cssBundle);

var jsBundle = new Bundle("~/Script/bootstrap") { Builder = new NullBuilder() };
jsBundle.Include("~/Script/bootstrap/bootstrap.js");
jsBundle.Transforms.Add(new JsTransformer());
bundles.Add(jsBundle);

And I get the next error:

File: /Content/bootstrap/alerts.less
Line number: 10
Column number: 11

Source error:

Line 9: .alert {
Line 10: padding: @alert-padding;
-------------------^

Line 11: margin-bottom: @line-height-computed;

Seems like it not compile well the variables defined in other .less file. Any idea?? I use the last version of Transformer and Bootstrap

Commented Unassigned: Exception when using @media [51]

$
0
0
when you use media queries in the less file, it throws an exception.
Comments: LESS is not Sass. Do not forget to put a semicolon after the import. ``` @import "../../bootstrap3/less/variables.less"; ``` А теперь по-русски: LESS – это Вам не Sass. Не забываем ставить точку с запятой после директивы @import. ``` @import "../../bootstrap3/less/variables.less"; ``` Вам сначала следовало бы хорошо изучить синтаксис LESS (http://lesscss.org/#docs), а уже потом писать в багтрекер. К сведению: перед публикацией я тестирую пакеты BundleTransformer.Less и BundleTransformer.LessLite на совместимость с Twitter Bootstrap 3.

Closed Unassigned: Exception when using @media [51]

$
0
0
when you use media queries in the less file, it throws an exception.

Commented Unassigned: Add ability to test bundle configuration [45]

$
0
0
I could not find a way to unit test bundle configuration.
What I would like to do is to call `BundleConfig.RegisterBundles(BundleTable.Bundles)` and then use `Bundle.EnumerateFiles()` to check what was included. Problem is, that it throws exception when creating `CustomStyleBundle`, as I understand because of this:
```
public HttpApplicationInfo()
: this(VirtualPathUtility.ToAbsolute("~/"), HttpContext.Current.Server.MapPath("~/"))
{ }
```
`VirtualPathUtility.ToAbsolute("~/")` throws exception:
>System.Web.HttpException : The application relative virtual path '~/' cannot be made absolute, because the path to the application is not known.

There's no easy way to mock `VirtualPathUtility.ToAbsolute("~/")`, so I could not think of a way to write unit tests, as far as I saw the source code, there are no unit tests for Bundles, so could not find any usable example.

StackOverflow has question regarding this, marked answer does not work with current version:
http://stackoverflow.com/questions/11371710/is-it-possible-to-unit-test-bundleconfig-in-mvc4
Comments: Hello, Dziedrius! In the Bundle Transformer 1.7.27 I made changes in the HttpApplicationInfo class. Perhaps they might help solve your problem.

New Post: .less handler watching only main .less file?

$
0
0
Hello, Bcullman and Nettsentrisk!

In new version I added to the base debugging HTTP handler support of the ETag HTTP header. But, unfortunately, I do not have technical possibilities to add support of the Last-Modified HTTP header (to access the file system I use BundleTable.VirtualPathProvider).

Perhaps they might help solve your problem.

Commented Unassigned: Exception when using @media [51]

$
0
0
when you use media queries in the less file, it throws an exception.
Comments: yeah, my bad. Forgot to put semicolon. Спасибо за помощь!

New Post: Using with CssRewriteUrlTransform

$
0
0
I'm attempting to use the LESS extension with Bootstrap, which contains several url() references for images, etc. I cannot figure out how to get the CssTransformer to use the CssRewriteUrlTransform to rewrite these when I am only including the top-level less file.

Any ideas?
var defaultCssBundle = new Bundle("~/Content/All.css", new CssTransformer());
defaultCssBundle.Include("~/Content/bootstrap/bootstrap.less", new CssRewriteUrlTransform());
defaultCssBundle.Include("~/Content/Site.css");
bundles.Add(defaultCssBundle);
Viewing all 2358 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>