Source: apc-abstract/task/worker/clean_directory.js

/**
 * Clean a directory.
 * @function task.worker.cleanDirectory
 * @param {object} config - Work configuration.
 * @param {string} config.dir - Directory to clean. Can be a glob pattern.
 * @param {function} callback - Callback when done.
 * @author Taka Okunishi
 */
var path = require('path'),
    debug = require('./_debug'),
    file = require('../../lib/file'),
    expandGlob = file.expandGlob,
    rmdirRecursive = file.rmdirRecursive;

module.exports = function (config, callback) {
    var baseDir = config.dir;
    expandGlob(baseDir, function (err, dirnames) {
        if (err) {
            callback(err);
            return;
        }
        var async = require('async');
        async.series(
            dirnames
                .map(function (dirname) {
                    return path.resolve(baseDir, dirname)
                })
                .map(function (dirname) {
                    return function (callback) {
                        rmdirRecursive(dirname, function (err) {
                            if (!err) {
                                debug('Clean directory:%s', dirname);
                            }
                            callback(err);
                        });
                    }
                }),
            function (err) {
                callback(err);
            }
        )
    });
};