Source: apc-static/task/worker/generate_color_less.js

/**
 * Generate color less.
 * @function task.worker.generateColorLess
 * @param {object} config - Task configuration.
 * @param {string} config.dest - Destination file name.
 * @param {string} config.srcPattern - Source file name pattern.
 * @para {string} config.settingFile - Setting file name.
 * @param {function} callback - Callback when done.
 * @author Taka Okunishi
 */
var path = require('path'),
    fs = require('fs'),
    debug = require('./_debug'),
    lib = require('../../lib'),
    file = lib.file;

exports = module.exports = function (config, callback) {
    var dest = path.resolve(config.dest),
        setting = require(path.resolve(config.settingFile)),
        src = exports._resolvePattern(config.srcPattern, setting);
    fs.exists(src, function (exists) {
        if (!exists) {
            callback(new Error('Source file not exists: ' + src));
            return;
        }
        file.relativeSymlink(src, dest, function (err) {
            if (!err) {
                debug.didCreateLink(dest, src);
            }
            callback(err);
        });
    });
};

exports._resolvePattern = function (pattern, data) {
    var resolved = path.resolve(pattern);
    Object.keys(data).forEach(function (key) {
        resolved = resolved.replace(new RegExp('{{' + key + '}}', 'g'), data[key]);
    });
    return resolved;
};