diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts
index ebd9f3b25cc..08c29ab8dc9 100644
--- a/src/compiler/emitter.ts
+++ b/src/compiler/emitter.ts
@@ -3902,11 +3902,25 @@ module ts {
}
});
}
+
+ function sortAMDModules(amdModules: {name: string; path: string}[]) {
+ // AMD modules with declared variable names goes first
+ return amdModules.sort((moduleA, moduleB) => {
+ if (moduleA.name == moduleB.name) {
+ return 0;
+ } else if (moduleA.name == undefined) {
+ return 1;
+ } else {
+ return -1;
+ }
+ });
+ }
function emitAMDModule(node: SourceFile, startIndex: number) {
var imports = getExternalImportDeclarations(node);
writeLine();
write("define(");
+ sortAMDModules(node.amdDependencies);
if (node.amdModuleName) {
write("\"" + node.amdModuleName + "\", ");
}
diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts
index 258f7df0b49..5288d6761d3 100644
--- a/src/compiler/parser.ts
+++ b/src/compiler/parser.ts
@@ -4719,12 +4719,7 @@ module ts {
var nameMatchResult = nameRegex.exec(comment);
if (pathMatchResult) {
var amdDependency = {path: pathMatchResult[2], name: nameMatchResult ? nameMatchResult[2] : undefined };
- // AMD dependencies with names have to go first in define header
- if (nameMatchResult) {
- amdDependencies.unshift(amdDependency);
- } else {
- amdDependencies.push(amdDependency);
- }
+ amdDependencies.push(amdDependency);
}
}
}
diff --git a/tests/baselines/reference/amdDependencyCommentName3.js b/tests/baselines/reference/amdDependencyCommentName3.js
index 2230a357bd7..76e00e1e0cc 100644
--- a/tests/baselines/reference/amdDependencyCommentName3.js
+++ b/tests/baselines/reference/amdDependencyCommentName3.js
@@ -10,6 +10,6 @@ m1.f();
///
///
///
-define(["require", "exports", "m2", "goo", "bar", "foo"], function (require, exports, m1, c, b) {
+define(["require", "exports", "m2", "bar", "goo", "foo"], function (require, exports, m1, b, c) {
m1.f();
});