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:
- <target name="js-compress">
- <delete file="${project.basedir}/build/js/main.js" />
- <append destFile="${project.basedir}/build/js/main.js">
- <filterchain>
- <filterreader classname="path.to.filters.YuiCompressorFilter">
- <param name="type" value="js" />
- <param name="preserve-semi" value="true" />
- </filterreader>
- </filterchain>
- <filelist dir="src/js" files="forms.js,validation.js,gallery.js" />
- </append>
- </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.
Comments
#1 Andre Flitsch (http://www.pixelperfect.at)
Cheers!
Andre
Comments have been retired for this article.