67 lines
1.6 KiB
JavaScript
67 lines
1.6 KiB
JavaScript
var chokidar = require("chokidar");
|
|
var mkdirp = require("mkdirp");
|
|
var path = require("path");
|
|
var util = require("./util");
|
|
var fs = require("fs");
|
|
var _ = require("lodash");
|
|
|
|
module.exports = function (commander, filenames, opts) {
|
|
if (commander.sourceMapsInline) {
|
|
opts.sourceMap = "inline";
|
|
}
|
|
|
|
var write = function (src, relative) {
|
|
var dest = path.join(commander.outDir, relative);
|
|
|
|
var data = util.compile(src, { sourceMapName: dest });
|
|
|
|
var up = path.normalize(dest + "/..");
|
|
mkdirp.sync(up);
|
|
|
|
if (commander.sourceMaps) {
|
|
fs.writeFileSync(dest + ".map", JSON.stringify(data.map));
|
|
}
|
|
|
|
fs.writeFileSync(dest, data.code);
|
|
|
|
console.log(src + " -> " + dest);
|
|
};
|
|
|
|
var handle = function (filename) {
|
|
if (!fs.existsSync(filename)) return;
|
|
|
|
var stat = fs.statSync(filename);
|
|
|
|
if (stat.isDirectory(filename)) {
|
|
var dirname = filename;
|
|
|
|
_.each(util.readdirFilter(dirname), function (filename) {
|
|
write(path.join(dirname, filename), filename);
|
|
});
|
|
} else {
|
|
write(filename, filename);
|
|
}
|
|
};
|
|
|
|
_.each(filenames, handle);
|
|
|
|
if (commander.watch) {
|
|
_.each(filenames, function (dirname) {
|
|
var watcher = chokidar.watch(dirname, {
|
|
persistent: true,
|
|
ignoreInitial: true
|
|
});
|
|
|
|
_.each(["add", "change", "unlink"], function (type) {
|
|
watcher.on(type, function (filename) {
|
|
// chop off the dirname plus the path separator
|
|
var relative = filename.slice(dirname.length + 1);
|
|
|
|
console.log(type, filename);
|
|
write(filename, relative);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
};
|