From a49d78b9259c17618a46f5b54dda416e7d5b7430 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:46:52 -0400 Subject: [PATCH 1/2] fix(@schematics/angular): remove explicit index option from new applications With the index option now defaulting to `/index.html` for the `application` build system, the explicit value present in new applications is no longer required. This removal further reduces the size of the `angular.json` file for new projects. --- packages/schematics/angular/application/index.ts | 1 - packages/schematics/angular/application/index_spec.ts | 3 +-- tests/legacy-cli/e2e/initialize/500-create-project.ts | 1 + tests/legacy-cli/e2e/tests/build/jit-ngmodule.ts | 1 + .../e2e/tests/build/prerender/discover-routes-ngmodule.ts | 1 + tests/legacy-cli/e2e/tests/build/rebuild-dot-dirname.ts | 1 + tests/legacy-cli/e2e/tests/build/relative-sourcemap.ts | 1 + .../tests/build/server-rendering/express-engine-ngmodule.ts | 1 + 8 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/schematics/angular/application/index.ts b/packages/schematics/angular/application/index.ts index 5e9f379aed5e..825f98c04158 100644 --- a/packages/schematics/angular/application/index.ts +++ b/packages/schematics/angular/application/index.ts @@ -256,7 +256,6 @@ function addAppToWorkspaceFile( builder: Builders.BuildApplication, defaultConfiguration: 'production', options: { - index: `${sourceRoot}/index.html`, browser: `${sourceRoot}/main.ts`, polyfills: options.zoneless ? undefined : ['zone.js'], tsConfig: `${projectRoot}tsconfig.app.json`, diff --git a/packages/schematics/angular/application/index_spec.ts b/packages/schematics/angular/application/index_spec.ts index 0607a20b766e..458f91d6eef0 100644 --- a/packages/schematics/angular/application/index_spec.ts +++ b/packages/schematics/angular/application/index_spec.ts @@ -330,7 +330,7 @@ describe('Application Schematic', () => { const prj = config.projects.foo; expect(prj.root).toEqual(''); const buildOpt = prj.architect.build.options; - expect(buildOpt.index).toEqual('src/index.html'); + expect(buildOpt.index).toBeUndefined(); expect(buildOpt.browser).toEqual('src/main.ts'); expect(buildOpt.assets).toEqual([{ 'glob': '**/*', 'input': 'public' }]); expect(buildOpt.polyfills).toEqual(['zone.js']); @@ -421,7 +421,6 @@ describe('Application Schematic', () => { const project = config.projects.foo; expect(project.root).toEqual('foo'); const buildOpt = project.architect.build.options; - expect(buildOpt.index).toEqual('foo/src/index.html'); expect(buildOpt.browser).toEqual('foo/src/main.ts'); expect(buildOpt.polyfills).toEqual(['zone.js']); expect(buildOpt.tsConfig).toEqual('foo/tsconfig.app.json'); diff --git a/tests/legacy-cli/e2e/initialize/500-create-project.ts b/tests/legacy-cli/e2e/initialize/500-create-project.ts index d641365b9276..837f54efbcde 100644 --- a/tests/legacy-cli/e2e/initialize/500-create-project.ts +++ b/tests/legacy-cli/e2e/initialize/500-create-project.ts @@ -35,6 +35,7 @@ export default async function () { main: build.options.browser, browser: undefined, outputPath: 'dist/test-project/browser', + index: 'src/index.html', }; build.configurations.development = { diff --git a/tests/legacy-cli/e2e/tests/build/jit-ngmodule.ts b/tests/legacy-cli/e2e/tests/build/jit-ngmodule.ts index 8ce44ea32386..910f8993a16d 100644 --- a/tests/legacy-cli/e2e/tests/build/jit-ngmodule.ts +++ b/tests/legacy-cli/e2e/tests/build/jit-ngmodule.ts @@ -24,6 +24,7 @@ export default async function () { browser: undefined, buildOptimizer: false, outputPath: 'dist/test-project-two', + index: 'src/index.html', }; build.configurations.development = { diff --git a/tests/legacy-cli/e2e/tests/build/prerender/discover-routes-ngmodule.ts b/tests/legacy-cli/e2e/tests/build/prerender/discover-routes-ngmodule.ts index cc79e32f9185..9d4843e00f7d 100644 --- a/tests/legacy-cli/e2e/tests/build/prerender/discover-routes-ngmodule.ts +++ b/tests/legacy-cli/e2e/tests/build/prerender/discover-routes-ngmodule.ts @@ -19,6 +19,7 @@ export default async function () { ...build.options, main: build.options.browser, browser: undefined, + index: 'src/index.html', }; build.configurations.development = { diff --git a/tests/legacy-cli/e2e/tests/build/rebuild-dot-dirname.ts b/tests/legacy-cli/e2e/tests/build/rebuild-dot-dirname.ts index ca6ab8ad2886..ed5f12ed94c1 100644 --- a/tests/legacy-cli/e2e/tests/build/rebuild-dot-dirname.ts +++ b/tests/legacy-cli/e2e/tests/build/rebuild-dot-dirname.ts @@ -34,6 +34,7 @@ export default async function () { main: build.options.browser, browser: undefined, outputPath: 'dist/subdirectory-test-project', + index: 'src/index.html', }; build.configurations.development = { diff --git a/tests/legacy-cli/e2e/tests/build/relative-sourcemap.ts b/tests/legacy-cli/e2e/tests/build/relative-sourcemap.ts index 789b52748796..11b2cccd082b 100644 --- a/tests/legacy-cli/e2e/tests/build/relative-sourcemap.ts +++ b/tests/legacy-cli/e2e/tests/build/relative-sourcemap.ts @@ -19,6 +19,7 @@ export default async function () { main: build.options.browser, browser: undefined, outputPath: 'dist/secondary-project', + index: 'src/index.html', }; build.configurations.development = { diff --git a/tests/legacy-cli/e2e/tests/build/server-rendering/express-engine-ngmodule.ts b/tests/legacy-cli/e2e/tests/build/server-rendering/express-engine-ngmodule.ts index 2fa393de929f..f05d2182bbd2 100644 --- a/tests/legacy-cli/e2e/tests/build/server-rendering/express-engine-ngmodule.ts +++ b/tests/legacy-cli/e2e/tests/build/server-rendering/express-engine-ngmodule.ts @@ -32,6 +32,7 @@ export default async function () { ...build.options, main: build.options.browser, browser: undefined, + index: 'src/index.html', }; build.configurations.development = { From d6553077d0e85309bc4806f1c848f7fcd42df1b3 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 28 Apr 2025 20:37:11 -0400 Subject: [PATCH 2/2] fix(@angular/pwa): support using default index option when not present The `@angular/pwa` add schematic now attempts to discover a default index option value if a configuration usage path within the build target is possible. The default value as per the `application` build system is `/index.html`. --- packages/angular/pwa/pwa/index.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/angular/pwa/pwa/index.ts b/packages/angular/pwa/pwa/index.ts index 28b0bc864522..f78095b7a564 100644 --- a/packages/angular/pwa/pwa/index.ts +++ b/packages/angular/pwa/pwa/index.ts @@ -110,9 +110,12 @@ export default function (options: PwaOptions): Rule { // Find all index.html files in build targets const indexFiles = new Set(); + let checkForDefaultIndex = false; for (const target of buildTargets) { if (typeof target.options?.index === 'string') { indexFiles.add(target.options.index); + } else if (target.options?.index === undefined) { + checkForDefaultIndex = true; } if (!target.configurations) { @@ -122,6 +125,8 @@ export default function (options: PwaOptions): Rule { for (const options of Object.values(target.configurations)) { if (typeof options?.index === 'string') { indexFiles.add(options.index); + } else if (options?.index === undefined) { + checkForDefaultIndex = true; } } } @@ -129,6 +134,14 @@ export default function (options: PwaOptions): Rule { // Setup sources for the assets files to add to the project const sourcePath = project.sourceRoot ?? posix.join(project.root, 'src'); + // Check for a default index file if a configuration path allows for a default usage + if (checkForDefaultIndex) { + const defaultIndexFile = posix.join(sourcePath, 'index.html'); + if (host.exists(defaultIndexFile)) { + indexFiles.add(defaultIndexFile); + } + } + // Setup service worker schematic options const { title, ...swOptions } = options;