How to use a different minification library for AEM client libraries than the default YUI Compressor library?

Environment

AEM 6.4,6.5

Steps

In AEM, you can swap out yui engine with GCC (Google Closure Compiler https://github.com/google/closure-compiler-js). 

For example, see these client library nodes that use GCC for js:

/libs/granite/contexthub/dependencies/coralui
/etc/clientlibs/granite/coralui3
/etc/clientlibs/granite/coralui2
/libs/dam/gui/coral/components/admin/adhocassetshare/clientlibs/adhocassetshare
/libs/dam/gui/components/admin/adhocassetshare/clientlibs/shareembedded
/etc/clientlibs/screens/player/shared
/etc/clientlibs/screens/player/firmware
/libs/dam/gui/components/admin/adhocassetshare/clientlibs/shareembeddedpreview
/apps/geometrixx-instore/clientlibs

Poznámka:

If you want to implement your own custom script processor, then you would implement this java interface:
com.adobe.granite.ui.clientlibs.script.ScriptProcessor

Related javadoc:

https://helpx.adobe.com/experience-manager/6-5/sites/developing/using/reference-materials/javadoc/com/adobe/granite/ui/clientlibs/script/ScriptProcessor.html 

This allows you to define ScriptProcessors that can modify script sources:

  • the processors are configurable with options
  • the processor can be used for minification, but also for non-minified cases

Configuration:

  • The default ScriptProcessors options can be set via the HTML Library Manager OSGi configuration (in the /system/console/configMgr UI).

 

Options for GCC are:

  • failOnWarning (defaults to "false")
  • languageIn (defaults to "ECMASCRIPT5")
  • languageOut (defaults to "ECMASCRIPT5")
  • compilationLevel (defaults to "simple") (can be "whitespace", "simple", "advanced")