docs: function minification(minifyConfig, minifyTargets, compiler) {
    // NOTE: The minifyTargets array is used to handle recursion state,
    // therefore it is passed as an argument, otherwise it would be
    // reset each time the function is called, due to its recursion.
    var source, sources, target = minifyTargets.shift();
    if (target) {
      sources = minifyConfig[target];
      if (!Array.isArray(sources)) sources = [sources];
      sources.forEach(function(item) {
        compiler.getSource(item, target, 'minify');
      });
      compiler.exec(function(err, compiled) {
        if (err) throw err;
        else {
          var ext = assetUtil.getExt(target);
          target = app.fullPath(app.paths.public + target);
          switch (ext) {
            case 'css':
              source = cleancss.minify(compiled.join('\n')).styles;
              instance.writeFile(target, source);
              app.debug("Asset Compiler: Minified CSS: " + app.relPath(target));
              break;
            case 'js':
              source = minifyJS(compiled.join('\n'));
              instance.writeFile(target, source);
              app.debug("Asset Compiler: Minified JavaScript: " + app.relPath(target));
              break;
            default:
              throw new Error("Asset Compiler: Extension not supported: " + target);
          }
          minification(minifyConfig, minifyTargets, compiler);
        }
      });
    } else {
      instance.config.minify = minifyConfig; // Set new config once minification is done
      app.emit('asset_compiler_minify_complete'); // Runs even without targets to minify
    }
  }