A YuiCompressorFilter for Phing

by Sander Marechal

I have been playing with Phing quite a lot lately. Phing is a build system that looks and acts a lot like Apache Ant, except that it is written in PHP. That's a great thing for PHP developers like me, because it makes it much easier to extend the system with custom extensions.

I am going to write several useful extensions, the first of which is a YuiCompressorFilter. Phing already has support for a JavaScrip minifier in the form of the JsMinTask, but the yui-compressor is more useful. Not only does it usually compress better than JsMin, it can also compress CSS files. Also, because my YuiCompressor extension is implemented as a filter instead of a task you can do fancy things like minifying and concatenating files in a single step.

Here's an example task that concatenates and minifies your JavaScript files in a single step:

  1. <target name="js-compress">
  2.     <delete file="${project.basedir}/build/js/main.js" />
  3.     <append destFile="${project.basedir}/build/js/main.js">
  4.         <filterchain>
  5.             <filterreader classname="path.to.filters.YuiCompressorFilter">
  6.                 <param name="type" value="js" />
  7.                 <param name="preserve-semi" value="true" />
  8.             </filterreader>
  9.         </filterchain>
  10.         <filelist dir="src/js" files="forms.js,validation.js,gallery.js" />
  11.     </append>
  12. </target>

The YuiCompressorTask supports all options supported by the yui-compressor itself. Full source code and documentation is available on github.com/sandermarechal/phing-ext.

Creative Commons Attribution-ShareAlike

Comments

#1 Andre Flitsch (http://www.pixelperfect.at)

Thanks very much for this filter, i was looking for something like this, and it has saved me the trouble of making it myself!

Cheers!
Andre
Post a new comment

Registration is not required to post comments, but cookies must be enabled. One of the advantages of registration is that you can edit your comments later on (editing not yet implemented). You can register or login here.




Your e-mail address will not be published, but your website URL will. All links that you post will tagged rel="nofollow" to throw off spammers. You are allowed to use the following XHTML tags in your comment: <em> <strong> <u> <b> <i> <strike> <blockquote> <big> <small> <ul> <ol> <li> <a href=""> <pre> <code> <tt> <br>. Please allow up to 60 second processing time after you post a comment. Our spam filters may take some time.