83 lines
2.0 KiB
JavaScript
Executable File
83 lines
2.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const args = [].concat(process.argv);
|
|
const debugMode = remove(args, '-debug');
|
|
const webpackMode = remove(args, '-webpack');
|
|
const debugSourceMap = remove(args, '-debugmap');
|
|
const dump = remove(args, '-dump');
|
|
|
|
if (args.length < 3)
|
|
return printUsage();
|
|
|
|
if (debugMode || webpackMode) {
|
|
console.log('Options:');
|
|
if (debugMode) console.log('- generate sourcemaps');
|
|
if (webpackMode) console.log('- generate webpack-compatible source');
|
|
}
|
|
|
|
const t0 = new Date().getTime();
|
|
const input = args[2];
|
|
const output = args[3];
|
|
const modules = args.slice(4);
|
|
|
|
const split = require('../tool/bin/split');
|
|
const result = split.run(input, output, modules, debugMode, webpackMode, debugSourceMap, dump);
|
|
|
|
for (file of result) {
|
|
if (!file || !file.source) continue;
|
|
if (file.map) {
|
|
writeIfChanged(file.map.path, file.map.content);
|
|
}
|
|
if (file.source) {
|
|
const content = file.map
|
|
? `${file.source.content}\n//# sourceMappingURL=${path.basename(file.map.path)}`
|
|
: file.source.content;
|
|
writeIfChanged(file.source.path, content);
|
|
}
|
|
if (file.debugMap) {
|
|
writeIfChanged(file.source.path + '.map.html', file.debugMap);
|
|
}
|
|
}
|
|
|
|
const t1 = new Date().getTime();
|
|
console.log(`Total process: ${t1 - t0}ms`);
|
|
|
|
|
|
/* TOOLS */
|
|
|
|
function remove(a, v) {
|
|
const i = a.indexOf(v);
|
|
if (i < 0) return false;
|
|
a.splice(i, 1);
|
|
return true;
|
|
}
|
|
|
|
function hasChanged(path, content) {
|
|
if (!fs.existsSync(path)) return true;
|
|
var original = String(fs.readFileSync(path));
|
|
return original != content;
|
|
}
|
|
|
|
function writeIfChanged(path, content) {
|
|
if (hasChanged(path, content)) {
|
|
console.log('Write ' + path);
|
|
fs.writeFileSync(path, content);
|
|
}
|
|
}
|
|
|
|
function printUsage() {
|
|
console.log(`
|
|
Haxe-JS code splitting, usage:
|
|
haxe-split [-debug] [-webpack] <input.js> <output.js> [<module-1> ... <module-n>]
|
|
|
|
Arguments:
|
|
-debug : generate source maps
|
|
-webpack : generate webpack-compatible source
|
|
input.js : path to input JS source
|
|
output.js: path to output JS source
|
|
module-i : qualified Haxe module name to split
|
|
`);
|
|
}
|