diff --git a/build.js b/build.js index 1fdbcaa72..c0b13fe10 100755 --- a/build.js +++ b/build.js @@ -15,6 +15,9 @@ /** Shortcut used to convert array-like objects to arrays */ var slice = [].slice; + /** Shorcut to the `stdout` object */ + var stdout = process.stdout; + /** Used to associate aliases with their real names */ var aliasToRealMap = { 'all': 'every', @@ -1282,7 +1285,7 @@ if (!_.isEqual(exportsOptions, exportsAll) || filterType || isBackbone || isLegacy || isMobile || isStrict || isUnderscore) { // output debug build if (!outputPath && !isStdOut) { - callback(path.join(cwd, 'lodash.custom.js'), debugSource); + callback(debugSource, path.join(cwd, 'lodash.custom.js')); } minify(source, { 'silent': isSilent, @@ -1294,9 +1297,10 @@ } source = postMinify(source); if (isStdOut) { - console.log(source); + stdout.write(source); + callback(source); } else { - callback(outputPath || path.join(cwd, 'lodash.custom.min.js'), source); + callback(source, outputPath || path.join(cwd, 'lodash.custom.min.js')); } } }); @@ -1308,9 +1312,10 @@ 'onComplete': function(source) { source = postMinify(source); if (isStdOut) { - console.log(source); + stdout.write(source); + callback(source); } else { - callback(outputPath || path.join(cwd, 'lodash.min.js'), source); + callback(source, outputPath || path.join(cwd, 'lodash.min.js')); } } }); @@ -1325,8 +1330,8 @@ } else { // or invoked directly - build(process.argv, function(filepath, source) { - fs.writeFileSync(filepath, source, 'utf8'); + build(process.argv, function(source, filepath) { + filepath && fs.writeFileSync(filepath, source, 'utf8'); }); } }()); diff --git a/build/post-compile.js b/build/post-compile.js index fe8f7b286..2b8399136 100644 --- a/build/post-compile.js +++ b/build/post-compile.js @@ -38,14 +38,14 @@ source = source.replace(/("function")\s*==\s*(typeof define)\s*&&\s*\(?\s*("object")\s*==\s*(typeof define\.amd)\s*&&\s*(define\.amd)\s*\)?/, '$2==$1&&$4==$3&&$5'); // add trailing semicolon - source = source.replace(/[\s;]*$/, ';'); - + if (source) { + source = source.replace(/[\s;]*$/, ';'); + } // exit early if version snippet isn't found var snippet = /VERSION\s*[=:]\s*([\'"])(.*?)\1/.exec(source); if (!snippet) { return source; } - // add license return licenseTemplate[/call\(this\);?$/.test(source) ? 'underscore' : 'lodash'] .replace('@VERSION', snippet[2]) + '\n;' + source; diff --git a/test/test-build.js b/test/test-build.js index 5a9b3ef6a..d3c280d14 100644 --- a/test/test-build.js +++ b/test/test-build.js @@ -454,7 +454,7 @@ var start = _.after(2, _.once(QUnit.start)); asyncTest('`lodash ' + command +'`', function() { - build(['--silent'].concat(command.split(' ')), function(filepath, source) { + build(['--silent'].concat(command.split(' ')), function(source, filepath) { var basename = path.basename(filepath, '.js'), context = createContext(), methodNames = []; @@ -535,7 +535,7 @@ commands.push('strict'); } - build(commands, function(filepath, source) { + build(commands, function(source, filepath) { var basename = path.basename(filepath, '.js'), context = createContext(), pass = !index; @@ -565,7 +565,7 @@ var start = _.once(QUnit.start); asyncTest('should not have deep clone', function() { - build(['-s', 'underscore'], function(filepath, source) { + build(['-s', 'underscore'], function(source, filepath) { var array = [{ 'a': 1 }], basename = path.basename(filepath, '.js'), context = createContext(); @@ -582,12 +582,7 @@ /*--------------------------------------------------------------------------*/ QUnit.module('exports command'); - var exportsAll = [ - 'amd', - 'commonjs', - 'global', - 'node' - ]; + (function() { var commands = [ 'exports=amd', @@ -600,7 +595,7 @@ var start = _.after(2, _.once(QUnit.start)); asyncTest('`lodash ' + command +'`', function() { - build(['-s', command], function(filepath, source) { + build(['-s', command], function(source, filepath) { var basename = path.basename(filepath, '.js'), context = createContext(), pass = false; @@ -641,4 +636,40 @@ }); }()); + /*--------------------------------------------------------------------------*/ + + QUnit.module('output options'); + + (function() { + ['-o a.js', '--output a.js'].forEach(function(command, index) { + var start = _.once(QUnit.start); + + asyncTest('`lodash ' + command +'`', function() { + build(['-s'].concat(command.split(' ')), function(source, filepath) { + equal(filepath, 'a.js', command); + start(); + }); + }); + }); + }()); + + /*--------------------------------------------------------------------------*/ + + QUnit.module('stdout options'); + + (function() { + ['-c', '--stdout'].forEach(function(command, index) { + var descriptor = Object.getOwnPropertyDescriptor(global, 'console'), + start = _.once(QUnit.start); + + asyncTest('`lodash ' + command +'`', function() { + build([command, 'exports=', 'include='], function(source, filepath) { + equal(source, ''); + equal(arguments.length, 1); + start(); + }); + }); + }); + }()); + }());