|
1 | 1 | import { normalize } from 'path'; |
2 | 2 | import { getGlobalVariable } from '../../utils/env'; |
3 | | -import { appendToFile, expectFileToMatch, prependToFile, writeFile } from '../../utils/fs'; |
| 3 | +import { expectFileToMatch, writeFile } from '../../utils/fs'; |
4 | 4 | import { exec, ng, silentNpm } from '../../utils/process'; |
5 | 5 | import { updateJsonFile } from '../../utils/project'; |
6 | 6 | import { readNgVersion } from '../../utils/version'; |
7 | 7 |
|
8 | | -export default function() { |
9 | | - let platformServerVersion = readNgVersion(); |
10 | | - |
11 | | - if (getGlobalVariable('argv')['ng-snapshots']) { |
12 | | - platformServerVersion = 'github:angular/platform-server-builds'; |
13 | | - } |
14 | | - |
| 8 | +export default async function () { |
15 | 9 | // Skip this test in Angular 2/4. |
16 | 10 | if (getGlobalVariable('argv').ng2 || getGlobalVariable('argv').ng4) { |
17 | | - return Promise.resolve(); |
| 11 | + return; |
18 | 12 | } |
19 | 13 |
|
20 | | - return ( |
21 | | - Promise.resolve() |
22 | | - .then(() => |
23 | | - updateJsonFile('package.json', packageJson => { |
24 | | - const dependencies = packageJson['dependencies']; |
25 | | - dependencies['@angular/platform-server'] = platformServerVersion; |
26 | | - }), |
27 | | - ) |
28 | | - .then(() => |
29 | | - updateJsonFile('angular.json', workspaceJson => { |
30 | | - const appArchitect = workspaceJson.projects['test-project'].architect; |
31 | | - appArchitect['server'] = { |
32 | | - builder: '@angular-devkit/build-angular:server', |
33 | | - options: { |
34 | | - outputPath: 'dist/test-project-server', |
35 | | - main: 'src/main.server.ts', |
36 | | - tsConfig: 'tsconfig.server.json', |
37 | | - }, |
38 | | - }; |
39 | | - }), |
40 | | - ) |
41 | | - .then(() => |
42 | | - writeFile( |
43 | | - './tsconfig.server.json', |
44 | | - ` |
45 | | - { |
46 | | - "extends": "./tsconfig.app.json", |
47 | | - "compilerOptions": { |
48 | | - "outDir": "../dist-server", |
49 | | - "baseUrl": "./", |
50 | | - "module": "commonjs", |
51 | | - "types": [] |
52 | | - }, |
53 | | - "files": [ |
54 | | - "src/main.server.ts" |
55 | | - ], |
56 | | - "include": [ |
57 | | - "src/**/*.d.ts" |
58 | | - ], |
59 | | - "angularCompilerOptions": { |
60 | | - "entryModule": "src/app/app.server.module#AppServerModule" |
61 | | - } |
62 | | - } |
63 | | - `, |
64 | | - ), |
65 | | - ) |
66 | | - .then(() => |
67 | | - writeFile( |
68 | | - './src/main.server.ts', |
69 | | - ` |
70 | | - import { enableProdMode } from '@angular/core'; |
71 | | -
|
72 | | - import { environment } from './environments/environment'; |
73 | | -
|
74 | | - if (environment.production) { |
75 | | - enableProdMode(); |
76 | | - } |
| 14 | + await ng('add', '@nguniversal/express-engine', '--client-project', 'test-project'); |
77 | 15 |
|
78 | | - export { AppServerModule } from './app/app.server.module'; |
79 | | - `, |
80 | | - ), |
81 | | - ) |
82 | | - .then(() => |
83 | | - writeFile( |
84 | | - './src/app/app.server.module.ts', |
85 | | - ` |
86 | | - import { NgModule } from '@angular/core'; |
87 | | - import { BrowserModule } from '@angular/platform-browser'; |
88 | | - import { ServerModule } from '@angular/platform-server'; |
| 16 | + await updateJsonFile('package.json', packageJson => { |
| 17 | + const dependencies = packageJson['dependencies']; |
| 18 | + dependencies['@angular/platform-server'] = getGlobalVariable('argv')['ng-snapshots'] |
| 19 | + ? 'github:angular/platform-server-builds' |
| 20 | + : readNgVersion(); |
| 21 | + }); |
89 | 22 |
|
90 | | - import { AppModule } from './app.module'; |
91 | | - import { AppComponent } from './app.component'; |
| 23 | + await silentNpm('install'); |
| 24 | + await ng('run', 'test-project:server:production'); |
| 25 | + await expectFileToMatch('dist/server/main.js', /exports.*AppServerModuleNgFactory/); |
92 | 26 |
|
93 | | - @NgModule({ |
94 | | - imports: [ |
95 | | - AppModule, |
96 | | - BrowserModule.withServerTransition(\{ appId: 'app' \}), |
97 | | - ServerModule, |
98 | | - ], |
99 | | - bootstrap: [AppComponent], |
100 | | - }) |
101 | | - export class AppServerModule {} |
102 | | - `, |
103 | | - ), |
104 | | - ) |
105 | | - .then(() => silentNpm('install')) |
106 | | - // This part of the test requires a non-aot build, which isn't available anymore. |
107 | | - // .then(() => ng('run', 'test-project:server')) |
108 | | - // // files were created successfully |
109 | | - // .then(() => expectFileToMatch('dist/test-project-server/main.js', |
110 | | - // /exports.*AppServerModule/)) |
111 | | - // .then(() => writeFile('./index.js', ` |
112 | | - // require('zone.js/dist/zone-node'); |
113 | | - // require('reflect-metadata'); |
114 | | - // const fs = require('fs'); |
115 | | - // const \{ AppServerModule \} = require('./dist/test-project-server/main'); |
116 | | - // const \{ renderModule \} = require('@angular/platform-server'); |
117 | | - |
118 | | - // renderModule(AppServerModule, \{ |
119 | | - // url: '/', |
120 | | - // document: '<app-root></app-root>' |
121 | | - // \}).then(html => \{ |
122 | | - // fs.writeFileSync('dist/test-project-server/index.html', html); |
123 | | - // \}); |
124 | | - // `)) |
125 | | - // .then(() => exec(normalize('node'), 'index.js')) |
126 | | - // .then(() => expectFileToMatch('dist/test-project-server/index.html', |
127 | | - // new RegExp('<h2 _ngcontent-c0="">Here are some links to help you start: </h2>'))) |
128 | | - .then(() => ng('run', 'test-project:server')) |
129 | | - // files were created successfully |
130 | | - .then(() => |
131 | | - expectFileToMatch('dist/test-project-server/main.js', /exports.*AppServerModuleNgFactory/), |
132 | | - ) |
133 | | - .then(() => |
134 | | - writeFile( |
135 | | - './index.js', |
136 | | - ` |
137 | | - require('zone.js/dist/zone-node'); |
138 | | - require('reflect-metadata'); |
| 27 | + await writeFile( |
| 28 | + './index.js', |
| 29 | + ` require('zone.js/dist/zone-node'); |
139 | 30 | const fs = require('fs'); |
140 | | - const \{ AppServerModuleNgFactory \} = require('./dist/test-project-server/main'); |
141 | | - const \{ renderModuleFactory \} = require('@angular/platform-server'); |
| 31 | + const { AppServerModuleNgFactory } = require('./dist/server/main'); |
| 32 | + const { renderModuleFactory } = require('@angular/platform-server'); |
142 | 33 |
|
143 | | - renderModuleFactory(AppServerModuleNgFactory, \{ |
| 34 | + renderModuleFactory(AppServerModuleNgFactory, { |
144 | 35 | url: '/', |
145 | 36 | document: '<app-root></app-root>' |
146 | | - \}).then(html => \{ |
147 | | - fs.writeFileSync('dist/test-project-server/index.html', html); |
148 | | - \}); |
149 | | - `, |
150 | | - ), |
151 | | - ) |
152 | | - .then(() => exec(normalize('node'), 'index.js')) |
153 | | - .then(() => |
154 | | - expectFileToMatch( |
155 | | - 'dist/test-project-server/index.html', |
156 | | - /<p.*>Here are some links to help you get started:<\/p>/, |
157 | | - ), |
158 | | - ) |
159 | | - .then(() => |
160 | | - expectFileToMatch( |
161 | | - './dist/test-project-server/main.js', |
162 | | - /require\(["']@angular\/[^"']*["']\)/, |
163 | | - ), |
164 | | - ) |
165 | | - |
166 | | - // Check externals. |
167 | | - .then(() => |
168 | | - prependToFile( |
169 | | - './src/app/app.server.module.ts', |
170 | | - ` |
171 | | - import 'zone.js/dist/zone-node'; |
172 | | - import 'reflect-metadata'; |
173 | | - `, |
174 | | - ).then(() => |
175 | | - appendToFile( |
176 | | - './src/app/app.server.module.ts', |
177 | | - ` |
178 | | - import * as fs from 'fs'; |
179 | | - import { renderModule } from '@angular/platform-server'; |
| 37 | + }).then(html => { |
| 38 | + fs.writeFileSync('dist/server/index.html', html); |
| 39 | + }); |
| 40 | + `, |
| 41 | + ); |
180 | 42 |
|
181 | | - renderModule(AppModule, \{ |
182 | | - url: '/', |
183 | | - document: '<app-root></app-root>' |
184 | | - \}).then(html => \{ |
185 | | - fs.writeFileSync('dist/test-project-server/index.html', html); |
186 | | - \}); |
187 | | - `, |
188 | | - ), |
189 | | - ), |
190 | | - ) |
| 43 | + await exec(normalize('node'), 'index.js'); |
| 44 | + await expectFileToMatch( |
| 45 | + 'dist/server/index.html', |
| 46 | + /<p.*>Here are some links to help you get started:<\/p>/, |
191 | 47 | ); |
192 | 48 | } |
0 commit comments