Project Description
This 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 Version
Based 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)

References
YUI 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.html
Michael Ash's Regex Compression: http://regexadvice.com/blogs/mash/archive/2008/04/27/Update-to-CSS-Minification.aspx
Last edited Mar 29 at 3:33 AM by purekrome, version 34

 

Want to leave feedback?
Please use Discussions or Reviews instead.

Archived page comments (5)

Updating...
© 2006-2009 Microsoft | About CodePlex | Privacy Statement | Terms of Use | Code of Conduct | Version 2009.6.1.15196