Skip to content

Commit 2a3a9e7

Browse files
committed
Update to Angular 18
Fixes #445
1 parent 9342b5b commit 2a3a9e7

11 files changed

+1854
-2469
lines changed

angular.json

+31-84
Original file line numberDiff line numberDiff line change
@@ -53,45 +53,48 @@
5353
"prefix": "app",
5454
"architect": {
5555
"build": {
56-
"builder": "@angular-devkit/build-angular:browser",
56+
"builder": "@angular-devkit/build-angular:application",
5757
"options": {
58-
"outputPath": "dist/demo/browser",
58+
"outputPath": {
59+
"base": "dist/demo"
60+
},
5961
"index": "projects/demo/src/index.html",
60-
"main": "projects/demo/src/main.ts",
6162
"polyfills": ["zone.js"],
6263
"tsConfig": "projects/demo/tsconfig.app.json",
6364
"assets": ["projects/demo/src/favicon.ico", "projects/demo/src/assets"],
6465
"styles": ["projects/demo/src/styles.scss"],
6566
"scripts": [],
66-
"vendorChunk": true,
6767
"extractLicenses": false,
68-
"buildOptimizer": false,
6968
"sourceMap": true,
7069
"optimization": false,
71-
"namedChunks": true
70+
"namedChunks": true,
71+
"browser": "projects/demo/src/main.ts",
72+
"server": "projects/demo/src/main.server.ts"
7273
},
7374
"configurations": {
7475
"production": {
76+
"optimization": true,
77+
"outputHashing": "all",
78+
"sourceMap": false,
79+
"namedChunks": false,
80+
"extractLicenses": true
81+
},
82+
"development": {},
83+
"production-ssr": {
7584
"optimization": true,
7685
"outputHashing": "all",
7786
"sourceMap": false,
7887
"namedChunks": false,
7988
"extractLicenses": true,
80-
"vendorChunk": false,
81-
"buildOptimizer": true,
82-
"budgets": [
83-
{
84-
"type": "initial",
85-
"maximumWarning": "2mb",
86-
"maximumError": "5mb"
87-
},
88-
{
89-
"type": "anyComponentStyle",
90-
"maximumWarning": "6kb"
91-
}
92-
]
89+
"ssr": {
90+
"entry": "projects/demo/server.ts"
91+
}
9392
},
94-
"development": {}
93+
"development-ssr": {
94+
"ssr": {
95+
"entry": "projects/demo/server.ts"
96+
}
97+
}
9598
},
9699
"defaultConfiguration": "production"
97100
},
@@ -104,16 +107,16 @@
104107
},
105108
"development": {
106109
"buildTarget": "demo:build:development"
110+
},
111+
"production-ssr": {
112+
"buildTarget": "demo:build:production-ssr"
113+
},
114+
"development-ssr": {
115+
"buildTarget": "demo:build:development-ssr"
107116
}
108117
},
109118
"defaultConfiguration": "development"
110119
},
111-
"extract-i18n": {
112-
"builder": "@angular-devkit/build-angular:extract-i18n",
113-
"options": {
114-
"buildTarget": "demo:build"
115-
}
116-
},
117120
"test": {
118121
"builder": "@angular-devkit/build-angular:karma",
119122
"options": {
@@ -141,68 +144,12 @@
141144
"devServerTarget": "demo:serve:production",
142145
"webdriverUpdate": false
143146
},
144-
"ssr": {
145-
"devServerTarget": "demo:serve-ssr:production",
147+
"production-ssr": {
148+
"devServerTarget": "demo:serve:production-ssr",
146149
"webdriverUpdate": false
147150
}
148151
},
149152
"defaultConfiguration": "production"
150-
},
151-
"server": {
152-
"builder": "@angular-devkit/build-angular:server",
153-
"options": {
154-
"outputPath": "dist/demo/server",
155-
"main": "projects/demo/server.ts",
156-
"tsConfig": "projects/demo/tsconfig.server.json",
157-
"buildOptimizer": false,
158-
"optimization": false,
159-
"sourceMap": true,
160-
"extractLicenses": false,
161-
"vendorChunk": true
162-
},
163-
"configurations": {
164-
"production": {
165-
"buildOptimizer": true,
166-
"outputHashing": "media",
167-
"optimization": true,
168-
"sourceMap": false,
169-
"extractLicenses": true,
170-
"vendorChunk": false
171-
},
172-
"development": {}
173-
},
174-
"defaultConfiguration": "production"
175-
},
176-
"serve-ssr": {
177-
"builder": "@angular-devkit/build-angular:ssr-dev-server",
178-
"configurations": {
179-
"development": {
180-
"browserTarget": "demo:build:development",
181-
"serverTarget": "demo:server:development"
182-
},
183-
"production": {
184-
"browserTarget": "demo:build:production",
185-
"serverTarget": "demo:server:production"
186-
}
187-
},
188-
"defaultConfiguration": "development"
189-
},
190-
"prerender": {
191-
"builder": "@angular-devkit/build-angular:prerender",
192-
"options": {
193-
"routes": ["/"]
194-
},
195-
"configurations": {
196-
"production": {
197-
"browserTarget": "demo:build:production",
198-
"serverTarget": "demo:server:production"
199-
},
200-
"development": {
201-
"browserTarget": "demo:build:development",
202-
"serverTarget": "demo:server:development"
203-
}
204-
},
205-
"defaultConfiguration": "production"
206153
}
207154
}
208155
}

package.json

+29-29
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
"test:schematics": "ts-node --project projects/schematics/tsconfig.json node_modules/.bin/jasmine projects/schematics/src/**/*.spec.ts",
88
"test:demo": "ng test demo --watch=false --browsers=ChromeCI",
99
"test:integration": "ng e2e demo",
10-
"test:integration:ssr": "ng e2e demo --configuration ssr",
10+
"test:integration:ssr": "ng e2e demo --configuration production-ssr",
1111
"lint": "ng lint",
1212
"start": "ng serve demo",
13-
"start:ssr": "ng run demo:serve-ssr",
13+
"start:ssr": "ng serve demo --configuration development-ssr",
1414
"build": "ng build angular-fontawesome",
1515
"build:watch": "ng build angular-fontawesome -c development --watch",
1616
"build:schematics": "tsc -p projects/schematics/tsconfig.json && ts-node -O '{\"module\":\"commonjs\"}' tasks/build-schematics.ts",
@@ -27,55 +27,55 @@
2727
},
2828
"homepage": "https://github.com/FortAwesome/angular-fontawesome",
2929
"devDependencies": {
30-
"@angular-devkit/build-angular": "patch:@angular-devkit/build-angular@npm%3A17.3.7#~/.yarn/patches/@angular-devkit-build-angular-npm-17.3.7-60e65bd832.patch",
31-
"@angular-devkit/core": "^17.3.7",
32-
"@angular-devkit/schematics": "^17.3.7",
30+
"@angular-devkit/build-angular": "patch:@angular-devkit/build-angular@npm%3A18.0.1#~/.yarn/patches/@angular-devkit-build-angular-npm-18.0.1-51eee52196.patch",
31+
"@angular-devkit/core": "^18.0.1",
32+
"@angular-devkit/schematics": "^18.0.1",
3333
"@angular-eslint/builder": "^17.0.0",
3434
"@angular-eslint/eslint-plugin": "^17.0.0",
3535
"@angular-eslint/eslint-plugin-template": "^17.0.0",
3636
"@angular-eslint/schematics": "17.0.0",
3737
"@angular-eslint/template-parser": "^17.0.0",
38-
"@angular/animations": "^17.3.8",
39-
"@angular/cli": "^17.3.7",
40-
"@angular/common": "^17.3.8",
41-
"@angular/compiler": "^17.3.8",
42-
"@angular/compiler-cli": "^17.3.8",
43-
"@angular/core": "^17.3.8",
44-
"@angular/language-service": "^17.3.8",
45-
"@angular/platform-browser": "^17.3.8",
46-
"@angular/platform-browser-dynamic": "^17.3.8",
47-
"@angular/platform-server": "^17.0.0",
48-
"@angular/router": "^17.0.0",
49-
"@angular/ssr": "^17.0.0",
38+
"@angular/animations": "^18.0.0",
39+
"@angular/cli": "^18.0.1",
40+
"@angular/common": "^18.0.0",
41+
"@angular/compiler": "^18.0.0",
42+
"@angular/compiler-cli": "^18.0.0",
43+
"@angular/core": "^18.0.0",
44+
"@angular/language-service": "^18.0.0",
45+
"@angular/platform-browser": "^18.0.0",
46+
"@angular/platform-browser-dynamic": "^18.0.0",
47+
"@angular/platform-server": "^18.0.0",
48+
"@angular/router": "^18.0.0",
49+
"@angular/ssr": "^18.0.1",
5050
"@fortawesome/free-regular-svg-icons": "^6.4.2",
5151
"@fortawesome/free-solid-svg-icons": "^6.4.2",
52-
"@types/express": "^4.17.17",
53-
"@types/jasmine": "~4.3.0",
54-
"@types/node": "~20.9.0",
52+
"@types/express": "^4.17.21",
53+
"@types/jasmine": "~4.3.6",
54+
"@types/node": "~20.12.12",
5555
"@typescript-eslint/eslint-plugin": "^6.10.0",
5656
"@typescript-eslint/parser": "^6.10.0",
57-
"browser-sync": "^3.0.0",
57+
"browser-sync": "^3.0.2",
5858
"chromedriver": "~123.0.1",
5959
"eslint": "^8.53.0",
6060
"eslint-config-prettier": "^9.0.0",
6161
"eslint-plugin-import": "2.29.0",
6262
"eslint-plugin-jsdoc": "^46.8.2",
6363
"eslint-plugin-prefer-arrow": "1.2.3",
64-
"express": "^4.18.2",
64+
"express": "^4.19.2",
6565
"jasmine-core": "~4.5.0",
6666
"jasmine-spec-reporter": "~7.0.0",
67-
"karma": "~6.4.2",
67+
"karma": "~6.4.3",
6868
"karma-chrome-launcher": "~3.2.0",
6969
"karma-coverage": "~2.2.1",
7070
"karma-jasmine": "~5.1.0",
7171
"karma-jasmine-html-reporter": "^2.1.0",
72-
"ng-packagr": "^17.0.0",
73-
"prettier": "3.0.3",
72+
"ng-packagr": "^18.0.0",
73+
"prettier": "3.2.5",
7474
"protractor": "~7.0.0",
7575
"rxjs": "^7.8.1",
76-
"ts-node": "~10.9.1",
77-
"typescript": "~5.2.2",
78-
"zone.js": "~0.14.2"
76+
"ts-node": "~10.9.2",
77+
"typescript": "~5.4.5",
78+
"zone.js": "~0.14.6"
7979
},
8080
"dependencies": {
8181
"@fortawesome/fontawesome-svg-core": "^6.5.2",
@@ -90,7 +90,7 @@
9090
"svg"
9191
],
9292
"peerDependencies": {
93-
"@angular/core": "^17.0.0"
93+
"@angular/core": "^18.0.0"
9494
},
9595
"schematics": "./schematics/collection.json",
9696
"packageManager": "[email protected]"

projects/demo/.eslintrc.json

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"parserOptions": {
88
"project": [
99
"projects/demo/tsconfig.app.json",
10-
"projects/demo/tsconfig.server.json",
1110
"projects/demo/tsconfig.spec.json",
1211
"projects/demo/e2e/tsconfig.json"
1312
],

projects/demo/e2e/src/app.e2e-spec.ts

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ describe('Angular FontAwesome demo', () => {
2424
const context = await appPage.appRoot.getAttribute('ng-server-context');
2525
if (context !== 'ssr') {
2626
// Skip the test if the page is not server-side rendered.
27+
console.warn('Skipping test as the page is not server-side rendered.');
2728
return;
2829
}
2930

projects/demo/server.ts

+13-25
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,43 @@
1-
import 'zone.js/node';
2-
31
import { APP_BASE_HREF } from '@angular/common';
42
import { CommonEngine } from '@angular/ssr';
5-
import * as express from 'express';
6-
import { existsSync } from 'node:fs';
7-
import { join } from 'node:path';
3+
import express from 'express';
4+
import { fileURLToPath } from 'node:url';
5+
import { dirname, join, resolve } from 'node:path';
86
import bootstrap from './src/main.server';
97

108
// The Express app is exported so that it can be used by serverless Functions.
119
export function app(): express.Express {
1210
const server = express();
13-
const distFolder = join(process.cwd(), 'dist/demo/browser');
14-
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
15-
? join(distFolder, 'index.original.html')
16-
: join(distFolder, 'index.html');
11+
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
12+
const browserDistFolder = resolve(serverDistFolder, '../browser');
13+
const indexHtml = join(serverDistFolder, 'index.server.html');
1714

1815
const commonEngine = new CommonEngine();
1916

2017
server.set('view engine', 'html');
21-
server.set('views', distFolder);
18+
server.set('views', browserDistFolder);
2219

2320
// Example Express Rest API endpoints
2421
// server.get('/api/**', (req, res) => { });
2522
// Serve static files from /browser
2623
server.get(
27-
'*.*',
28-
express.static(distFolder, {
24+
'**',
25+
express.static(browserDistFolder, {
2926
maxAge: '1y',
27+
index: 'index.html',
3028
}),
3129
);
3230

3331
// All regular routes use the Angular engine
34-
server.get('*', (req, res, next) => {
32+
server.get('**', (req, res, next) => {
3533
const { protocol, originalUrl, baseUrl, headers } = req;
3634

3735
commonEngine
3836
.render({
3937
bootstrap,
4038
documentFilePath: indexHtml,
4139
url: `${protocol}://${headers.host}${originalUrl}`,
42-
publicPath: distFolder,
40+
publicPath: browserDistFolder,
4341
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
4442
})
4543
.then((html) => res.send(html))
@@ -59,14 +57,4 @@ function run(): void {
5957
});
6058
}
6159

62-
// Webpack will replace 'require' with '__webpack_require__'
63-
// '__non_webpack_require__' is a proxy to Node 'require'
64-
// The below code is to ensure that the server is run only when not requiring the bundle.
65-
declare const __non_webpack_require__: NodeRequire;
66-
const mainModule = __non_webpack_require__.main;
67-
const moduleFilename = (mainModule && mainModule.filename) || '';
68-
if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
69-
run();
70-
}
71-
72-
export default bootstrap;
60+
run();

projects/demo/tsconfig.app.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
"outDir": "../../out-tsc/app",
55
"types": ["node"]
66
},
7-
"files": ["src/main.ts"],
7+
"files": ["src/main.ts", "src/main.server.ts", "server.ts"],
88
"include": ["src/**/*.d.ts"]
99
}

projects/demo/tsconfig.server.json

-9
This file was deleted.

testing/ng-package.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
{
2-
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3-
"dest": "../../dist/angular-fontawesome/testing",
4-
"deleteDestPath": true,
2+
"$schema": "../node_modules/ng-packagr/ng-entrypoint.schema.json",
53
"lib": {
64
"entryFile": "src/public_api.ts"
75
}

tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"baseUrl": "./",
55
"outDir": "./dist/out-tsc",
66
"forceConsistentCasingInFileNames": true,
7+
"esModuleInterop": true,
78
"strict": true,
89
"strictPropertyInitialization": false,
910
"strictNullChecks": false,
@@ -13,7 +14,6 @@
1314
"noFallthroughCasesInSwitch": true,
1415
"sourceMap": true,
1516
"declaration": false,
16-
"downlevelIteration": true,
1717
"experimentalDecorators": true,
1818
"moduleResolution": "bundler",
1919
"importHelpers": true,

0 commit comments

Comments
 (0)