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

Environment

AEM 6.2, 6.3 and later versions

Steps

In AEM6.2 and later versions, 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

In addition, 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://docs.adobe.com/docs/en/aem/6-2/develop/ref/diff-previous/changes/pkg_com.adobe.granite.ui.clientlibs.script.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")