Skip to content

Commit e19a80d

Browse files
committed
feat(nf): compatibility with @angular/build package
1 parent 8dbc749 commit e19a80d

File tree

5 files changed

+74
-41
lines changed

5 files changed

+74
-41
lines changed

libs/mf/src/schematics/init-webpack/schematic.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import {
2+
apply,
23
chain,
4+
mergeWith,
5+
move,
36
Rule,
7+
template,
48
Tree,
59
url,
6-
apply,
7-
mergeWith,
8-
template,
9-
move,
1010
} from '@angular-devkit/schematics';
1111

12-
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
1312
import { strings } from '@angular-devkit/core';
13+
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
1414
import * as json5 from 'json5';
1515
import * as semver from 'semver';
1616

@@ -232,7 +232,8 @@ export default function config(options: MfSchematicSchema): Rule {
232232

233233
const buildConfig = projectConfig?.architect?.build;
234234
const isApplicationBuilder =
235-
buildConfig?.builder === '@angular-devkit/build-angular:application';
235+
buildConfig?.builder === '@angular-devkit/build-angular:application' ||
236+
buildConfig?.builder === '@angular/build:application';
236237

237238
if (isApplicationBuilder && !options.skipConfirmation) {
238239
console.warn(

libs/native-federation/src/builders/build/builder.ts

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import * as path from 'path';
21
import * as fs from 'fs';
32
import * as mrmime from 'mrmime';
3+
import * as path from 'path';
44

5-
import { buildApplication, ApplicationBuilderOptions } from '@angular/build';
5+
import { ApplicationBuilderOptions, buildApplication } from '@angular/build';
66
import {
7-
serveWithVite,
87
buildApplicationInternal,
8+
serveWithVite,
99
} from '@angular/build/private';
1010

1111
import {
@@ -16,39 +16,38 @@ import {
1616

1717
import { normalizeOptions } from '@angular-devkit/build-angular/src/builders/dev-server/options';
1818

19-
import { setLogLevel, logger } from '@softarc/native-federation/build';
19+
import { logger, setLogLevel } from '@softarc/native-federation/build';
2020

21-
import { FederationOptions } from '@softarc/native-federation/build';
22-
import { setBuildAdapter } from '@softarc/native-federation/build';
21+
import { targetFromTargetString } from '@angular-devkit/architect';
22+
import {
23+
buildForFederation,
24+
FederationOptions,
25+
getExternals,
26+
loadFederationConfig,
27+
setBuildAdapter,
28+
} from '@softarc/native-federation/build';
2329
import {
2430
createAngularBuildAdapter,
2531
setMemResultHandler,
2632
} from '../../utils/angular-esbuild-adapter';
27-
import { getExternals } from '@softarc/native-federation/build';
28-
import { loadFederationConfig } from '@softarc/native-federation/build';
29-
import { buildForFederation } from '@softarc/native-federation/build';
30-
import { targetFromTargetString } from '@angular-devkit/architect';
3133

32-
import { NfBuilderSchema } from './schema';
33-
import { reloadBrowser, setError } from '../../utils/dev-server';
34-
import { RebuildHubs } from '../../utils/rebuild-events';
35-
import { updateScriptTags } from '../../utils/updateIndexHtml';
34+
import { JsonObject } from '@angular-devkit/core';
3635
import { existsSync, mkdirSync, rmSync } from 'fs';
36+
import { reloadBrowser, setError } from '../../utils/dev-server';
3737
import {
3838
EsBuildResult,
3939
MemResults,
4040
NgCliAssetResult,
4141
} from '../../utils/mem-resuts';
42-
import { JsonObject } from '@angular-devkit/core';
42+
import { RebuildHubs } from '../../utils/rebuild-events';
4343
import { createSharedMappingsPlugin } from '../../utils/shared-mappings-plugin';
44+
import { updateScriptTags } from '../../utils/updateIndexHtml';
45+
import { NfBuilderSchema } from './schema';
4446
// import { NextHandleFunction } from 'vite';
45-
import { PluginBuild } from 'esbuild';
4647
import { FederationInfo } from '@softarc/native-federation-runtime';
47-
import {
48-
getI18nConfig,
49-
I18nConfig,
50-
translateFederationArtefacts,
51-
} from '../../utils/i18n';
48+
import { PluginBuild } from 'esbuild';
49+
import { checkAngularBuildApplicationBuilder } from '../../utils/check-builder';
50+
import { getI18nConfig, translateFederationArtefacts } from '../../utils/i18n';
5251

5352
function _buildApplication(options, context, pluginsOrExtensions) {
5453
let extensions;
@@ -268,7 +267,9 @@ export async function* runBuilder(
268267

269268
options.deleteOutputPath = false;
270269

271-
const appBuilderName = '@angular-devkit/build-angular:application';
270+
const appBuilderName = checkAngularBuildApplicationBuilder()
271+
? '@angular/build:application'
272+
: '@angular-devkit/build-angular:application';
272273

273274
const builderRun = runServer
274275
? serveWithVite(

libs/native-federation/src/schematics/appbuilder/schematic.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Rule, Tree } from '@angular-devkit/schematics';
33
import { MfSchematicSchema } from './schema';
44

55
import * as path from 'path';
6+
import { checkAngularBuildApplicationBuilder } from '../../utils/check-builder';
67

78
type NormalizedOptions = {
89
polyfills: string;
@@ -41,7 +42,9 @@ function updateWorkspaceConfig(
4142

4243
if (projectConfig.architect.esbuild) {
4344
projectConfig.architect.esbuild.builder =
44-
'@angular-devkit/build-angular:application';
45+
checkAngularBuildApplicationBuilder()
46+
? '@angular/build:application'
47+
: '@angular-devkit/build-angular:application';
4548
projectConfig.architect.esbuild.options.browser =
4649
projectConfig.architect.esbuild.options.main;
4750
delete projectConfig.architect.esbuild.options.main;

libs/native-federation/src/schematics/init/schematic.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import {
2-
chain,
3-
Rule,
4-
Tree,
5-
url,
62
apply,
3+
chain,
74
mergeWith,
8-
template,
95
move,
106
noop,
7+
Rule,
8+
template,
9+
Tree,
10+
url,
1111
} from '@angular-devkit/schematics';
1212

13-
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
1413
import { strings } from '@angular-devkit/core';
14+
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
1515
import { MfSchematicSchema } from './schema';
1616

1717
import {
@@ -26,6 +26,7 @@ import {
2626
} from '@schematics/angular/utility/dependencies';
2727

2828
import * as path from 'path';
29+
import { checkAngularBuildApplicationBuilder } from '../../utils/check-builder';
2930

3031
const SSR_VERSION = '^2.0.10';
3132

@@ -212,11 +213,16 @@ function updateWorkspaceConfig(
212213

213214
const originalBuild = projectConfig.architect.build;
214215

215-
if (originalBuild.builder !== '@angular-devkit/build-angular:application') {
216+
if (
217+
originalBuild.builder !== '@angular-devkit/build-angular:application' ||
218+
originalBuild.builder !== '@angular/build:application'
219+
) {
216220
console.log(
217221
'Switching project to the application builder using esbuild ...'
218222
);
219-
originalBuild.builder = '@angular-devkit/build-angular:application';
223+
originalBuild.builder = checkAngularBuildApplicationBuilder()
224+
? '@angular/build:application'
225+
: '@angular-devkit/build-angular:application';
220226
delete originalBuild.configurations?.development?.buildOptimizer;
221227
delete originalBuild.configurations?.development?.vendorChunk;
222228
}
@@ -502,7 +508,7 @@ function makeServerAsync(
502508

503509
const cors = `import { createRequire } from "module";
504510
const require = createRequire(import.meta.url);
505-
const cors = require("cors");
511+
const cors = require("cors");
506512
`;
507513
const mainContent = tree.read(server).toString('utf8');
508514
const updatedContent = (cors + mainContent)
@@ -531,7 +537,7 @@ console.log('Starting SSR for Shell');
531537
remotesOrManifestUrl: '../browser/federation.manifest.json',
532538
relBundlePath: '../browser/',
533539
});
534-
540+
535541
await import('./bootstrap-server');
536542
537543
})();
@@ -548,7 +554,7 @@ console.log('Starting SSR for Shell');
548554
remotesOrManifestUrl: ${manifest},
549555
relBundlePath: '../browser/',
550556
});
551-
557+
552558
await import('./bootstrap-server');
553559
554560
})();
@@ -561,7 +567,7 @@ console.log('Starting SSR for Shell');
561567
await initNodeFederation({
562568
relBundlePath: '../browser/'
563569
});
564-
570+
565571
await import('./bootstrap-server');
566572
567573
})();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { existsSync } from 'fs';
2+
import { resolve } from 'path';
3+
4+
/**
5+
* Since Angular 16, the Angular CLI uses the new @angular/build package
6+
* Currently the @angular/build package is not installed by default
7+
* However in the next version of Angular (v20), it will replace the @angular-devkit/build-angular package
8+
*
9+
* This functions checks if the @angular/build package is installed to insure a compatibility with the next version of Angular
10+
* and insure also that if people migrate on Angular 20 and don't change the builder, it will not break the compatibility with this package in v20
11+
*
12+
* @returns true if the Angular build package is installed
13+
*/
14+
export const checkAngularBuildApplicationBuilder = () => {
15+
const pathAngularBuildPackage = resolve(
16+
process.cwd(),
17+
'node_modules',
18+
'@angular/build'
19+
);
20+
21+
return existsSync(pathAngularBuildPackage);
22+
};

0 commit comments

Comments
 (0)