diff --git a/packages/schematics/angular/universal/files/src/__main@stripTsExtension__.ts.template b/packages/schematics/angular/universal/files/src/__main@stripTsExtension__.ts.template index 4e9897c5ae49..0a7e46d4d2fe 100644 --- a/packages/schematics/angular/universal/files/src/__main@stripTsExtension__.ts.template +++ b/packages/schematics/angular/universal/files/src/__main@stripTsExtension__.ts.template @@ -1,6 +1,15 @@ +/*************************************************************************************************** + * Initialize the server environment - for example, adding DOM built-in types to the global scope. + * + * NOTE: + * This import must come before any imports (direct or transitive) that rely on DOM built-ins being + * available, such as `@angular/elements`. + */ +import '@angular/platform-server/init'; + <% if (hasLocalizePackage) { %>/*************************************************************************************************** * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. -*/ + */ import '@angular/localize/init'; <% } %>import { enableProdMode } from '@angular/core'; diff --git a/packages/schematics/angular/universal/index_spec.ts b/packages/schematics/angular/universal/index_spec.ts index 86c4563ca7c5..47793f2e69e0 100644 --- a/packages/schematics/angular/universal/index_spec.ts +++ b/packages/schematics/angular/universal/index_spec.ts @@ -242,6 +242,14 @@ describe('Universal Schematic', () => { expect(tree.exists(filePath)).toEqual(true); }); + it(`should add import to '@angular/platform-server/init' in main file`, async () => { + const tree = await schematicRunner.runSchematicAsync('universal', defaultOptions, appTree) + .toPromise(); + const filePath = '/projects/bar/src/main.server.ts'; + const contents = tree.readContent(filePath); + expect(contents).toContain('import \'@angular/platform-server/init\''); + }); + it(`should not add import to '@angular/localize' in main file when it's not a depedency`, async () => { const tree = await schematicRunner.runSchematicAsync('universal', defaultOptions, appTree) .toPromise();