Project DescriptionThis is a .NET port of the Yahoo! UI Library's YUI Compressor Java project. The objective of this project is to compress any Javascript and Cascading Style Sheets to an efficient level that works exactly as the original source, before it was minified.
Main Features
- Stock Yui Css compression.
- Stock Yui JavaScript compression.
- MsBuild task which can be used in a Web Deployment Project build.
- The MsBuild task also compiles all compressed files into a single destination file (aka. file combining).
- Can now handle Encoding Types (eg. Unicode) from v1.2.2.0 onwards and ThreadCulture from v1.3.0.0 onwards.
Referenced VersionBased on YUI Compressor version:
2.4.2 (last checked at 2009-02-22).
Who's utilising this code/library?If you use this code in some project, please drop us a message so we can include it in this list :)
Sample Code : Css Compression
using Yahoo.Yui.Compressor;
...
string compressedCss;
// Note: string css == some cascading style sheet data loaded from some file, etc.
compressedCss = CssCompressor.Compress(css); // No column width's specified.
compressedCss = CssCompressor.Compress(css, 73); // Column width of 73 specified,for nice reading
// if that's what you want.
Sample Code : JavaScript Compression
using Yahoo.Yui.Compressor;
...
string compressedJavaScript;
// Note: string javaScript == some javascript data loaded from some file, etc.
compressedJavaScript= JavaScriptCompressor.Compress(javaScript);
Sample MsBuild output
Sample Web Deployment Project 'code snippet'
<Target Name="AfterMerge">
<!-- Define a list of Css files that will need to be compressed/minified. -->
<ItemGroup>
<CssFiles Include="$(TempBuildDir)Css\StylesheetSample1.css" />
<CssFiles Include="$(TempBuildDir)Css\StylesheetSample2.css" />
<CssFiles Include="$(TempBuildDir)Css\StylesheetSample3.css" />
</ItemGroup>
<!-- Define a list of Js files that will need to be compressed/minified. -->
<ItemGroup>
<JavaScriptFiles Include="$(TempBuildDir)JavaScript\JavaScriptSample1.js" />
<JavaScriptFiles Include="$(TempBuildDir)JavaScript\JavaScriptSample2.js" />
</ItemGroup>
<!-- Compress all the css into the master file. -->
<CompressorTask
CssFiles="@(CssFiles)"
DeleteCssFiles="false"
CssOutputFile="$(TempBuildDir)Css\Site.css"
CssCompressionType="YuiStockCompression"
JavaScriptFiles="@(JavaScriptFiles)"
ObfuscateJavaScript="True"
PreserveAllSemicolons="False"
DisableOptimizations="False"
EncodingType="Default"
DeleteJavaScriptFiles="False"
LineBreakPosition="-1"
JavaScriptOutputFile="$(TempBuildDir)JavaScript\Site.js"
LoggingType="ALittleBit"
ThreadCulture="en-gb" />
</Target>
Advanced Tricks
- Output magic :: Dynamically grab all source files from a single folder, instead of manually hardcoding each file: read about it here. (Kudos to nameetpai)
ReferencesYUI Compressor home page:
http://developer.yahoo.com/yui/compressor/DimeBrain's YUI Css Compressor port:
http://www.dimebrain.com/2008/03/a-better-css-mi.htmlMichael Ash's Regex Compression:
http://regexadvice.com/blogs/mash/archive/2008/04/27/Update-to-CSS-Minification.aspx