mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var uglifyjs = require('uglify-js');
 | |
| var async = require('async');
 | |
| var fs = require('fs');
 | |
| var file = require('./src/file');
 | |
| 
 | |
| var Minifier = {
 | |
| 	js: {}
 | |
| };
 | |
| 
 | |
| /* Javascript */
 | |
| Minifier.js.minify = function (scripts, minify, callback) {
 | |
| 
 | |
| 	scripts = scripts.filter(function (file) {
 | |
| 		return file && file.endsWith('.js');
 | |
| 	});
 | |
| 
 | |
| 	async.filter(scripts, function (script, next) {
 | |
| 		file.exists(script, function (exists) {
 | |
| 			if (!exists) {
 | |
| 				console.warn('[minifier] file not found, ' + script);
 | |
| 			}
 | |
| 			next(exists);
 | |
| 		});
 | |
| 	}, function (scripts) {
 | |
| 		if (minify) {
 | |
| 			minifyScripts(scripts, callback);
 | |
| 		} else {
 | |
| 			concatenateScripts(scripts, callback);
 | |
| 		}
 | |
| 	});
 | |
| };
 | |
| 
 | |
| process.on('message', function (payload) {
 | |
| 	switch(payload.action) {
 | |
| 	case 'js':
 | |
| 		Minifier.js.minify(payload.scripts, payload.minify, function (minified/*, sourceMap*/) {
 | |
| 			process.send({
 | |
| 				type: 'end',
 | |
| 				// sourceMap: sourceMap,
 | |
| 				minified: minified
 | |
| 			});
 | |
| 		});
 | |
| 		break;
 | |
| 	}
 | |
| });
 | |
| 
 | |
| function minifyScripts(scripts, callback) {
 | |
| 	// The portions of code involving the source map are commented out as they're broken in UglifyJS2
 | |
| 	// Follow along here: https://github.com/mishoo/UglifyJS2/issues/700
 | |
| 	try {
 | |
| 		var minified = uglifyjs.minify(scripts, {
 | |
| 				// outSourceMap: "nodebb.min.js.map",
 | |
| 				compress: false
 | |
| 			});
 | |
| 
 | |
| 		callback(minified.code/*, minified.map*/);
 | |
| 	} catch(err) {
 | |
| 		process.send({
 | |
| 			type: 'error',
 | |
| 			message: err.message
 | |
| 		});
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function concatenateScripts(scripts, callback) {
 | |
| 	async.map(scripts, fs.readFile, function (err, scripts) {
 | |
| 		if (err) {
 | |
| 			process.send({
 | |
| 				type: 'error',
 | |
| 				message: err.message
 | |
| 			});
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		scripts = scripts.join(require('os').EOL + ';');
 | |
| 
 | |
| 		callback(scripts);
 | |
| 	});
 | |
| } |