diff --git a/build.js b/build.js index e4966fb10..30907d71c 100755 --- a/build.js +++ b/build.js @@ -3842,10 +3842,10 @@ source = source.replace(/(?: *\/\/.*\n)*( *)if *\(freeModule[\s\S]+?else *{([\s\S]+?\n)\1}\n+/, '$1$2'); } if (!isCommonJS) { - source = source.replace(/(?: *\/\/.*\n)*(?:( *)else *{)?\s*freeExports\.\w+ *=[\s\S]+?(?:\n\1})?\n+/, ''); + source = source.replace(/(?: *\/\/.*\n)*(?:( *)(})? *else *{)?\s*freeExports\.\w+ *=[\s\S]+?(?:\n\1})?\n+/, '$1$2\n'); } if (!isGlobal) { - source = source.replace(/(?:( *)(})? *else(?: *if *\(_\))? *{)?(?:\s*\/\/.*)*\s*(?:window\._|_\.templates) *=[\s\S]+?(?:\n\1})?\n+/g, '$1$2\n'); + source = source.replace(/(?: *\/\/.*\n)*(?:( *)(})? *else(?: *if *\(_\))? *{)?(?:\s*\/\/.*)*\s*(?:window\._|_\.templates) *=[\s\S]+?(?:\n\1})?\n+/g, '$1$2\n'); } // remove `if (freeExports) {...}` if it's empty if (isAMD && isGlobal) { diff --git a/test/test-build.js b/test/test-build.js index 856ed47fc..8ef24e579 100644 --- a/test/test-build.js +++ b/test/test-build.js @@ -608,7 +608,7 @@ commands.forEach(function(command) { var expectedId = /underscore/.test(command) ? 'underscore' : 'lodash'; - asyncTest('`lodash template=*.jst exports=amd' + (command ? ' ' + command : '') + '`', function() { + asyncTest('`lodash exports=amd' + (command ? ' ' + command + '`' : '` using the default `moduleId`'), function() { var start = _.after(2, _.once(QUnit.start)); build(['-s', 'template=' + path.join(templatePath, '*.jst'), 'exports=amd'].concat(command || []), function(data) { @@ -624,10 +624,11 @@ context.define.amd = {}; vm.runInContext(data.source, context); + var templates = _.templates; equal(moduleId, expectedId, basename); - ok('a' in _.templates && 'b' in _.templates, basename); + ok('a' in templates && 'b' in templates && 'c' in templates, basename); - var actual = _.templates.a({ 'people': ['moe', 'larry'] }); + var actual = templates.a({ 'people': ['moe', 'larry'] }); equal(actual.replace(/[\r\n]+/g, ''), '', basename); delete _.templates; @@ -662,6 +663,72 @@ }); }); }); + + var defaultTemplates = { 'c': function() { return ''; } }; + + var exportsCommands = [ + 'exports=amd', + 'exports=commonjs', + 'exports=global', + 'exports=node', + 'exports=none' + ]; + + exportsCommands.forEach(function(command, index) { + asyncTest('`lodash ' + command +'`', function() { + var start = _.after(2, _.once(QUnit.start)); + + build(['-s', 'template=' + path.join(templatePath, '*.jst'), command], function(data) { + var templates, + basename = path.basename(data.outputPath, '.js'), + context = createContext(), + source = data.source; + + switch(index) { + case 0: + context.define = function(requires, factory) { factory(_); }; + context.define.amd = {}; + vm.runInContext(source, context); + + templates = _.templates || defaultTemplates; + break; + + case 1: + context.exports = {}; + context.require = function() { return _; }; + vm.runInContext(source, context); + + templates = context.exports.templates || defaultTemplates; + break; + + case 2: + context._ = _; + vm.runInContext(source, context); + + templates = context._.templates || defaultTemplates; + break; + + case 3: + context.exports = {}; + context.require = function() { return _; }; + context.module = { 'exports': context.exports }; + vm.runInContext(source, context); + + templates = context.module.exports || defaultTemplates; + break; + + case 4: + vm.runInContext(source, context); + strictEqual(context._, undefined, basename); + } + if (templates) { + equal(templates.c({ 'name': 'Moe' }), 'Hello Moe!', basename); + } + delete _.templates; + start(); + }); + }); + }); }()); /*--------------------------------------------------------------------------*/ @@ -1247,18 +1314,21 @@ switch(index) { case 0: - context.define = function(fn) { + context.define = function(factory) { pass = true; - context._ = fn(); + context._ = factory(); }; context.define.amd = {}; vm.runInContext(source, context); + ok(pass, basename); + ok(_.isFunction(context._), basename); break; case 1: context.exports = {}; vm.runInContext(source, context); + ok(_.isFunction(context.exports._), basename); strictEqual(context._, undefined, basename); break; @@ -1272,6 +1342,7 @@ context.exports = {}; context.module = { 'exports': context.exports }; vm.runInContext(source, context); + ok(_.isFunction(context.module.exports), basename); strictEqual(context._, undefined, basename); break;