diff --git a/app.js b/app.js index eb7ddfde10..8b506dc02a 100644 --- a/app.js +++ b/app.js @@ -24,6 +24,7 @@ nconf.argv().env(); var fs = require('fs'), + async = require('async'), winston = require('winston'), pkg = require('./package.json'), path = require('path'), @@ -85,17 +86,44 @@ '/src/jquery.form.js', '/src/utils.js' ], - minified; + minified, mtime; toMinify = toMinify.map(function (jsPath) { return path.join(__dirname + '/public', jsPath); }); - minified = uglifyjs.minify(toMinify); - fs.writeFile(path.join(__dirname, '/public/src', 'nodebb.min.js'), minified.code, function (err) { - if (!err) { - winston.info('Minified client-side libraries'); + async.parallel({ + mtime: function (next) { + async.map(toMinify, fs.stat, function (err, stats) { + async.reduce(stats, 0, function (memo, item, callback) { + mtime = +new Date(item.mtime); + callback(null, mtime > memo ? mtime : memo); + }, next); + }); + }, + minFile: function (next) { + var minFile = path.join(__dirname, 'public/src/nodebb.min.js'); + if (!fs.existsSync(minFile)) { + winston.warn('No minified client-side library found'); + return next(null, 0); + } + + fs.stat(minFile, function (err, stat) { + next(err, +new Date(stat.mtime)); + }); + } + }, function (err, results) { + if (results.minFile > results.mtime) { + winston.info('No changes to client-side libraries -- skipping minification'); } else { - winston.error('Problem minifying client-side libraries, exiting.'); - process.exit(); + winston.info('Minifying client-side libraries'); + minified = uglifyjs.minify(toMinify); + fs.writeFile(path.join(__dirname, '/public/src', 'nodebb.min.js'), minified.code, function (err) { + if (!err) { + winston.info('Minified client-side libraries'); + } else { + winston.error('Problem minifying client-side libraries, exiting.'); + process.exit(); + } + }); } });