diff --git a/lib/amd-helpers.js b/lib/amd-helpers.js index 2ba796a9..9b8483e4 100644 --- a/lib/amd-helpers.js +++ b/lib/amd-helpers.js @@ -193,9 +193,11 @@ hookConstructor(function(constructor) { if (!entry.name) { if (!curMeta) throw new TypeError('Unexpected anonymous AMD define.'); + + if (curMeta.entry && !curMeta.entry.name) + throw new Error('Multiple anonymous defines in module ' + load.name); - if (!curMeta.entry || curMeta.entry.name) - curMeta.entry = entry; + curMeta.entry = entry; } // named define else { diff --git a/test/test.js b/test/test.js index 462080c8..370fd3fd 100644 --- a/test/test.js +++ b/test/test.js @@ -301,6 +301,16 @@ asyncTest('Loading an AMD bundle with an anonymous define', function() { }, err); }); +asyncTest('Loading an AMD bundle with multiple anonymous defines', function() { + System['import']('tests/multiple-anonymous.js').then(function(m) { + ok(false); + start(); + }, function(e) { + ok(e.toString().indexOf('Multiple anonymous') != -1) + start(); + }); +}) + asyncTest('Loading AMD CommonJS form', function() { System['import']('tests/amd-cjs-module.js').then(function(m) { ok(m.test == 'hi', 'Not defined'); diff --git a/test/tests/multiple-anonymous.js b/test/tests/multiple-anonymous.js new file mode 100644 index 00000000..5e4b93f9 --- /dev/null +++ b/test/tests/multiple-anonymous.js @@ -0,0 +1,14 @@ +define('named-in-anon', function() { + return 'named'; +}); + +define(['named-in-anon'], function(named) { + return { + anon: true, + named: named + }; +}); + +define([], function() { + +}); \ No newline at end of file