diff --git a/src/compiler/transformers/module/module.ts b/src/compiler/transformers/module/module.ts
index 493f5a43a1f7a..08c1fccfe16d5 100644
--- a/src/compiler/transformers/module/module.ts
+++ b/src/compiler/transformers/module/module.ts
@@ -200,6 +200,7 @@ namespace ts {
*/
function transformUMDModule(node: SourceFile) {
const { aliasedModuleNames, unaliasedModuleNames, importAliasNames } = collectAsynchronousDependencies(node, /*includeNonAmdDependencies*/ false);
+ const moduleName = tryGetModuleNameFromFile(node, host, compilerOptions);
const umdHeader = createFunctionExpression(
/*modifiers*/ undefined,
/*asteriskToken*/ undefined,
@@ -260,6 +261,8 @@ namespace ts {
createIdentifier("define"),
/*typeArguments*/ undefined,
[
+ // Add the module name (if provided).
+ ...(moduleName ? [moduleName] : []),
createArrayLiteral([
createLiteral("require"),
createLiteral("exports"),
diff --git a/tests/baselines/reference/umdNamedAmdMode.js b/tests/baselines/reference/umdNamedAmdMode.js
new file mode 100644
index 0000000000000..eff0384b575c2
--- /dev/null
+++ b/tests/baselines/reference/umdNamedAmdMode.js
@@ -0,0 +1,19 @@
+//// [main.ts]
+///
+export const a = 1;
+
+//// [main.js]
+(function (factory) {
+ if (typeof module === "object" && typeof module.exports === "object") {
+ var v = factory(require, exports);
+ if (v !== undefined) module.exports = v;
+ }
+ else if (typeof define === "function" && define.amd) {
+ define("a", ["require", "exports"], factory);
+ }
+})(function (require, exports) {
+ "use strict";
+ exports.__esModule = true;
+ ///
+ exports.a = 1;
+});
diff --git a/tests/baselines/reference/umdNamedAmdMode.symbols b/tests/baselines/reference/umdNamedAmdMode.symbols
new file mode 100644
index 0000000000000..73ad766e50bfa
--- /dev/null
+++ b/tests/baselines/reference/umdNamedAmdMode.symbols
@@ -0,0 +1,5 @@
+=== tests/cases/compiler/main.ts ===
+///
+export const a = 1;
+>a : Symbol(a, Decl(main.ts, 1, 12))
+
diff --git a/tests/baselines/reference/umdNamedAmdMode.types b/tests/baselines/reference/umdNamedAmdMode.types
new file mode 100644
index 0000000000000..f8f2d131fc2bc
--- /dev/null
+++ b/tests/baselines/reference/umdNamedAmdMode.types
@@ -0,0 +1,6 @@
+=== tests/cases/compiler/main.ts ===
+///
+export const a = 1;
+>a : 1
+>1 : 1
+
diff --git a/tests/cases/compiler/umdNamedAmdMode.ts b/tests/cases/compiler/umdNamedAmdMode.ts
new file mode 100644
index 0000000000000..d18e142744355
--- /dev/null
+++ b/tests/cases/compiler/umdNamedAmdMode.ts
@@ -0,0 +1,4 @@
+// @module: umd
+// @filename: main.ts
+///
+export const a = 1;
\ No newline at end of file