59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
};
|