var fs = require("fs");
var path = require("path");
module.exports = function(grunt) {
grunt.registerMultiTask("bundle", "Bundles code, themes and bundles to a single file.", function() {
var options, contents, themes, plugins;
function appendFile(src) {
src = src.replace(/\\/g, '/');
if (fs.existsSync(src)) {
grunt.log.writeln("Appending file:", src);
contents += grunt.file.read(src);
} else {
grunt.fail.fatal("Could not find file: " + src);
}
}
function append(dirPath, fileName, value) {
if (value) {
value.split(/,/).forEach(function(src) {
appendFile(path.join(dirPath, src, fileName));
});
}
}
options = grunt.config([this.name, this.target]).options;
options.themesDir = options.themesDir || "plugins";
options.themeFileName = options.themeFileName || "theme.min.js";
options.pluginsDir = options.pluginsDir || "plugins";
options.pluginFileName = options.pluginFileName || "plugin.min.js";
options.outputPath = options.outputPath || "full.min.js";
themes = grunt.option("themes");
plugins = grunt.option("plugins");
if (!themes && !plugins) {
grunt.log.writeln("Use: grunt bundle --themes <comma separated list of themes> --plugins <comma separated list of plugins>");
process.exit(-1);
return;
}
contents = "";
this.files.forEach(function(filePair) {
filePair.src.forEach(function(src) {
appendFile(src);
});
});
append(options.themesDir, options.themeFileName, themes);
append(options.pluginsDir, options.pluginFileName, plugins);
if (contents.length > 0) {
grunt.file.write(options.outputPath, contents);
grunt.log.ok("Created bundle js:", options.outputPath);
}
});
};
|