From aa2ee2d32655ba940d02a5cefec1c7af7c32de57 Mon Sep 17 00:00:00 2001 From: Colum Ferry Date: Fri, 18 Nov 2022 12:20:37 +0000 Subject: [PATCH] fix(angular): should support filereplacements for apps that already have them (#13247) (cherry picked from commit b4fb074a09058f82edb3002c3b2b621c245e4f5e) --- .../__snapshots__/setup-ssr.spec.ts.snap | 28 +++++++++++++++ .../setup-ssr/lib/update-project-config.ts | 6 ++++ .../generators/setup-ssr/setup-ssr.spec.ts | 34 ++++++++++++++++++- 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/packages/angular/src/generators/setup-ssr/__snapshots__/setup-ssr.spec.ts.snap b/packages/angular/src/generators/setup-ssr/__snapshots__/setup-ssr.spec.ts.snap index 10c0e58642afb..24bae49ea24e9 100644 --- a/packages/angular/src/generators/setup-ssr/__snapshots__/setup-ssr.spec.ts.snap +++ b/packages/angular/src/generators/setup-ssr/__snapshots__/setup-ssr.spec.ts.snap @@ -84,3 +84,31 @@ if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { export * from './src/main.server';" `; + +exports[`setupSSR should use fileReplacements if they already exist 1`] = ` +Object { + "configurations": Object { + "development": Object { + "extractLicenses": false, + "optimization": false, + "sourceMap": true, + }, + "production": Object { + "fileReplacements": Array [ + Object { + "replace": "apps/app1/src/environments/environment.ts", + "with": "apps/app1/src/environments/environment.prod.ts", + }, + ], + "outputHashing": "media", + }, + }, + "defaultConfiguration": "production", + "executor": "@angular-devkit/build-angular:server", + "options": Object { + "main": "apps/app1/server.ts", + "outputPath": "dist/apps/app1/server", + "tsConfig": "apps/app1/tsconfig.server.json", + }, +} +`; diff --git a/packages/angular/src/generators/setup-ssr/lib/update-project-config.ts b/packages/angular/src/generators/setup-ssr/lib/update-project-config.ts index c5e87a82bbe14..1090ad61d35bc 100644 --- a/packages/angular/src/generators/setup-ssr/lib/update-project-config.ts +++ b/packages/angular/src/generators/setup-ssr/lib/update-project-config.ts @@ -11,6 +11,9 @@ export function updateProjectConfig(tree: Tree, schema: Schema) { projectConfig.targets.build.options.outputPath = `dist/apps/${schema.project}/browser`; + const buildTargetFileReplacements = + projectConfig.targets.build.configurations?.production?.fileReplacements; + projectConfig.targets.server = { executor: '@angular-devkit/build-angular:server', options: { @@ -21,6 +24,9 @@ export function updateProjectConfig(tree: Tree, schema: Schema) { configurations: { production: { outputHashing: 'media', + ...(buildTargetFileReplacements + ? { fileReplacements: buildTargetFileReplacements } + : {}), }, development: { optimization: false, diff --git a/packages/angular/src/generators/setup-ssr/setup-ssr.spec.ts b/packages/angular/src/generators/setup-ssr/setup-ssr.spec.ts index 607407c0e039b..0b24638d498a6 100644 --- a/packages/angular/src/generators/setup-ssr/setup-ssr.spec.ts +++ b/packages/angular/src/generators/setup-ssr/setup-ssr.spec.ts @@ -1,4 +1,8 @@ -import { readJson, readProjectConfiguration } from '@nrwl/devkit'; +import { + readJson, + readProjectConfiguration, + updateProjectConfiguration, +} from '@nrwl/devkit'; import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; import { PackageJson } from 'nx/src/utils/package-json'; import { angularVersion, ngUniversalVersion } from '../../utils/versions'; @@ -126,4 +130,32 @@ describe('setupSSR', () => { expect(packageJson.devDependencies[dep]).toEqual(version); } }); + + it('should use fileReplacements if they already exist', async () => { + // ARRANGE + const tree = createTreeWithEmptyWorkspace(); + + await applicationGenerator(tree, { + name: 'app1', + }); + + tree.write('apps/app1/src/environments/environment.ts', ''); + tree.write('apps/app1/src/environments/environment.prod.ts', ''); + const project = readProjectConfiguration(tree, 'app1'); + project.targets.build.configurations.production.fileReplacements = [ + { + replace: 'apps/app1/src/environments/environment.ts', + with: 'apps/app1/src/environments/environment.prod.ts', + }, + ]; + updateProjectConfiguration(tree, 'app1', project); + + // ACT + await setupSsr(tree, { project: 'app1' }); + + // ASSERT + expect( + readProjectConfiguration(tree, 'app1').targets.server + ).toMatchSnapshot(); + }); });