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
 | 
						|
`);
 | 
						|
}
 |