-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
dir.js
88 lines (72 loc) 路 2.43 KB
/
dir.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
let outputFileSync = require("output-file-sync");
let slash = require("slash");
let path = require("path");
let util = require("./util");
let fs = require("fs");
let _ = require("lodash");
module.exports = function (commander, filenames) {
function write(src, relative) {
// remove extension and then append back on .js
relative = relative.replace(/\.(\w*?)$/, "") + ".js";
let dest = path.join(commander.outDir, relative);
let data = util.compile(src, {
sourceFileName: slash(path.relative(dest + "/..", src)),
sourceMapTarget: path.basename(relative)
});
if (!commander.copyFiles && data.ignored) return;
// we've requested explicit sourcemaps to be written to disk
if (data.map && commander.sourceMaps && commander.sourceMaps !== "inline") {
let mapLoc = dest + ".map";
data.code = util.addSourceMappingUrl(data.code, mapLoc);
outputFileSync(mapLoc, JSON.stringify(data.map));
}
outputFileSync(dest, data.code);
util.chmod(src, dest);
util.log(src + " -> " + dest);
}
function handleFile(src, filename) {
if (util.shouldIgnore(src)) return;
if (util.canCompile(filename, commander.extensions)) {
write(src, filename);
} else if (commander.copyFiles) {
let dest = path.join(commander.outDir, filename);
outputFileSync(dest, fs.readFileSync(src));
util.chmod(src, dest);
}
}
function handle(filename) {
if (!fs.existsSync(filename)) return;
let stat = fs.statSync(filename);
if (stat.isDirectory(filename)) {
let dirname = filename;
_.each(util.readdir(dirname), function (filename) {
let src = path.join(dirname, filename);
handleFile(src, filename);
});
} else {
write(filename, filename);
}
}
if (!commander.skipInitialBuild) {
_.each(filenames, handle);
}
if (commander.watch) {
let chokidar = util.requireChokidar();
_.each(filenames, function (dirname) {
let watcher = chokidar.watch(dirname, {
persistent: true,
ignoreInitial: true
});
_.each(["add", "change"], function (type) {
watcher.on(type, function (filename) {
let relative = path.relative(dirname, filename) || filename;
try {
handleFile(filename, relative);
} catch (err) {
console.error(err.stack);
}
});
});
});
}
};