@nx/angular 0.0.0-pr-22870-d31b9b7 → 0.0.0-pr-26816-51699f9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/migrations.json CHANGED
@@ -1933,6 +1933,15 @@
1933
1933
  "alwaysAddToPackageJson": false
1934
1934
  }
1935
1935
  }
1936
+ },
1937
+ "19.4.0-module-federation": {
1938
+ "version": "19.4.0-rc.2",
1939
+ "packages": {
1940
+ "@module-federation/node": {
1941
+ "version": "^2.3.0",
1942
+ "alwaysAddToPackageJson": false
1943
+ }
1944
+ }
1936
1945
  }
1937
1946
  }
1938
1947
  }
package/ng-package.json CHANGED
@@ -9,6 +9,7 @@
9
9
  "@nx/",
10
10
  "@angular-devkit",
11
11
  "@angular-eslint/",
12
+ "@module-federation/enhanced",
12
13
  "@schematics",
13
14
  "@phenomnomnominal/tsquery",
14
15
  "@typescript-eslint/",
@@ -20,12 +21,12 @@
20
21
  "ts-node",
21
22
  "tsconfig-paths",
22
23
  "semver",
23
- "webpack",
24
24
  "http-server",
25
25
  "magic-string",
26
26
  "enquirer",
27
27
  "find-cache-dir",
28
- "piscina"
28
+ "piscina",
29
+ "webpack"
29
30
  ],
30
31
  "keepLifecycleScripts": true
31
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/angular",
3
- "version": "0.0.0-pr-22870-d31b9b7",
3
+ "version": "0.0.0-pr-26816-51699f9",
4
4
  "private": false,
5
5
  "description": "The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: \n\n- Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypress. \n\n- Generators to help scaffold code quickly (like: Micro Frontends, Libraries, both internal to your codebase and publishable to npm) \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
6
6
  "repository": {
@@ -77,16 +77,17 @@
77
77
  "minimatch": "9.0.3",
78
78
  "semver": "^7.5.3",
79
79
  "tslib": "^2.3.0",
80
- "webpack": "^5.80.0",
81
80
  "webpack-merge": "^5.8.0",
82
- "@nx/devkit": "0.0.0-pr-22870-d31b9b7",
83
- "@nx/js": "0.0.0-pr-22870-d31b9b7",
84
- "@nx/eslint": "0.0.0-pr-22870-d31b9b7",
85
- "@nx/webpack": "0.0.0-pr-22870-d31b9b7",
86
- "@nx/web": "0.0.0-pr-22870-d31b9b7",
87
- "@nx/workspace": "0.0.0-pr-22870-d31b9b7",
81
+ "webpack": "^5.88.0",
82
+ "@module-federation/enhanced": "~0.2.3",
83
+ "@nx/devkit": "0.0.0-pr-26816-51699f9",
84
+ "@nx/js": "0.0.0-pr-26816-51699f9",
85
+ "@nx/eslint": "0.0.0-pr-26816-51699f9",
86
+ "@nx/webpack": "0.0.0-pr-26816-51699f9",
87
+ "@nx/web": "0.0.0-pr-26816-51699f9",
88
+ "@nx/workspace": "0.0.0-pr-26816-51699f9",
88
89
  "piscina": "^4.4.0",
89
- "@nrwl/angular": "0.0.0-pr-22870-d31b9b7"
90
+ "@nrwl/angular": "0.0.0-pr-26816-51699f9"
90
91
  },
91
92
  "peerDependencies": {
92
93
  "@angular-devkit/build-angular": ">= 16.0.0 < 19.0.0",
@@ -36,6 +36,8 @@ function executeModuleFederationDevSSRBuilder(schema, context) {
36
36
  : Array.isArray(options.devRemotes)
37
37
  ? options.devRemotes
38
38
  : [options.devRemotes];
39
+ // Set NX_MF_DEV_REMOTES for the Nx Runtime Library Control Plugin
40
+ process.env.NX_MF_DEV_REMOTES = JSON.stringify(devServeRemotes);
39
41
  (0, module_federation_1.validateDevRemotes)({ devRemotes: devServeRemotes }, workspaceProjects);
40
42
  const remotesToSkip = new Set(options.skipRemotes ?? []);
41
43
  const staticRemotes = (0, module_federation_1.getStaticRemotes)(project, context, workspaceProjects, remotesToSkip);
@@ -62,6 +62,8 @@ async function* moduleFederationDevServerExecutor(schema, context) {
62
62
  projectGraph: context.projectGraph,
63
63
  root: context.root,
64
64
  }, pathToManifestFile);
65
+ // Set NX_MF_DEV_REMOTES for the Nx Runtime Library Control Plugin
66
+ process.env.NX_MF_DEV_REMOTES = JSON.stringify(remotes.devRemotes.map((r) => (typeof r === 'string' ? r : r.remoteName)));
65
67
  if (remotes.devRemotes.length > 0 && !schema.staticRemotesPort) {
66
68
  options.staticRemotesPort = options.devRemotes.reduce((portToUse, r) => {
67
69
  const remoteName = typeof r === 'string' ? r : r.remoteName;
@@ -26,6 +26,12 @@ async function updateSsrSetup(tree, options, appName, typescriptConfiguration) {
26
26
  project.targets.server.options.customWebpackConfig = {
27
27
  path: (0, devkit_1.joinPathFragments)(project.root, `webpack.server.config.${pathToTemplateFiles}`),
28
28
  };
29
+ if (project.targets.server.configurations &&
30
+ project.targets.server.configurations.development) {
31
+ if ('vendorChunk' in project.targets.server.configurations.development) {
32
+ delete project.targets.server.configurations.development.vendorChunk;
33
+ }
34
+ }
29
35
  project.targets['serve-ssr'].executor =
30
36
  '@nx/angular:module-federation-dev-ssr';
31
37
  (0, devkit_1.updateProjectConfiguration)(tree, appName, project);
@@ -36,6 +36,12 @@ async function updateSsrSetup(tree, { appName, port, standalone, typescriptConfi
36
36
  project.targets.server.options.customWebpackConfig = {
37
37
  path: (0, devkit_1.joinPathFragments)(project.root, `webpack.server.config.${typescriptConfiguration ? 'ts' : 'js'}`),
38
38
  };
39
+ if (project.targets.server.configurations &&
40
+ project.targets.server.configurations.development) {
41
+ if ('vendorChunk' in project.targets.server.configurations.development) {
42
+ delete project.targets.server.configurations.development.vendorChunk;
43
+ }
44
+ }
39
45
  project.targets['serve-ssr'].options = {
40
46
  ...(project.targets['serve-ssr'].options ?? {}),
41
47
  port,
@@ -19,7 +19,11 @@ async function setupMf(tree, rawOptions) {
19
19
  (0, lib_1.removeDeadCodeFromRemote)(tree, options);
20
20
  (0, lib_1.setupTspathForRemote)(tree, options);
21
21
  if (!options.skipPackageJson) {
22
- installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { '@nx/web': versions_1.nxVersion, '@nx/webpack': versions_1.nxVersion });
22
+ installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
23
+ '@nx/web': versions_1.nxVersion,
24
+ '@nx/webpack': versions_1.nxVersion,
25
+ '@module-federation/enhanced': versions_1.moduleFederationEnhancedVersion,
26
+ });
23
27
  }
24
28
  }
25
29
  const remotesWithPorts = (0, lib_1.getRemotesWithPorts)(tree, options);
@@ -39,7 +43,10 @@ async function setupMf(tree, rawOptions) {
39
43
  });
40
44
  }
41
45
  if (!options.skipPackageJson) {
42
- installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { '@nx/webpack': versions_1.nxVersion });
46
+ installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
47
+ '@nx/webpack': versions_1.nxVersion,
48
+ '@module-federation/enhanced': versions_1.moduleFederationEnhancedVersion,
49
+ });
43
50
  }
44
51
  }
45
52
  (0, lib_1.fixBootstrap)(tree, projectConfig.root, options);
@@ -5,7 +5,7 @@ const devkit_1 = require("@nx/devkit");
5
5
  function addMfEnvToTargetDefaultInputs(tree) {
6
6
  const nxJson = (0, devkit_1.readNxJson)(tree);
7
7
  const webpackExecutor = '@nx/angular:webpack-browser';
8
- const mfEnvVar = 'NX_MF_DEV_SERVER_STATIC_REMOTES';
8
+ const mfEnvVar = 'NX_MF_DEV_REMOTES';
9
9
  nxJson.targetDefaults ??= {};
10
10
  nxJson.targetDefaults[webpackExecutor] ??= {};
11
11
  nxJson.targetDefaults[webpackExecutor].inputs ??= [
@@ -17,7 +17,8 @@ exports.backwardCompatibleVersions = {
17
17
  expressVersion: '~4.18.2',
18
18
  typesExpressVersion: '4.17.14',
19
19
  browserSyncVersion: '^3.0.0',
20
- moduleFederationNodeVersion: '~1.0.5',
20
+ moduleFederationNodeVersion: '~2.3.0',
21
+ moduleFederationEnhancedVersion: '~0.2.3',
21
22
  angularEslintVersion: '~16.0.0',
22
23
  tailwindVersion: '^3.0.2',
23
24
  postcssVersion: '^8.4.5',
@@ -43,7 +44,8 @@ exports.backwardCompatibleVersions = {
43
44
  expressVersion: '~4.18.2',
44
45
  typesExpressVersion: '4.17.14',
45
46
  browserSyncVersion: '^3.0.0',
46
- moduleFederationNodeVersion: '~1.0.5',
47
+ moduleFederationNodeVersion: '~2.3.0',
48
+ moduleFederationEnhancedVersion: '~0.2.3',
47
49
  angularEslintVersion: '~17.3.0',
48
50
  tailwindVersion: '^3.0.2',
49
51
  postcssVersion: '^8.4.5',
@@ -1,2 +1,2 @@
1
- import { ModuleFederationConfig } from '@nx/webpack/src/utils/module-federation';
2
- export declare function withModuleFederationForSSR(options: ModuleFederationConfig): Promise<(config: any) => any>;
1
+ import type { ModuleFederationConfig, NxModuleFederationConfigOverride } from '@nx/webpack/src/utils/module-federation';
2
+ export declare function withModuleFederationForSSR(options: ModuleFederationConfig, configOverride?: NxModuleFederationConfigOverride): Promise<(config: any) => any>;
@@ -2,48 +2,69 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.withModuleFederationForSSR = void 0;
4
4
  const utils_1 = require("./utils");
5
- async function withModuleFederationForSSR(options) {
5
+ async function withModuleFederationForSSR(options, configOverride) {
6
6
  if (global.NX_GRAPH_CREATION) {
7
7
  return (config) => config;
8
8
  }
9
+ options.useNxLibraryControlPlugin ??= true;
9
10
  const { sharedLibraries, sharedDependencies, mappedRemotes } = await (0, utils_1.getModuleFederationConfig)(options, {
10
11
  isServer: true,
11
12
  });
12
- return (config) => ({
13
- ...(config ?? {}),
14
- target: false,
15
- output: {
16
- ...(config.output ?? {}),
17
- uniqueName: options.name,
18
- },
19
- optimization: {
20
- ...(config.optimization ?? {}),
21
- runtimeChunk: false,
22
- },
23
- resolve: {
24
- ...(config.resolve ?? {}),
25
- alias: {
26
- ...(config.resolve?.alias ?? {}),
27
- ...sharedLibraries.getAliases(),
13
+ return (config) => {
14
+ const updatedConfig = {
15
+ ...(config ?? {}),
16
+ target: false,
17
+ output: {
18
+ ...(config.output ?? {}),
19
+ uniqueName: options.name,
28
20
  },
29
- },
30
- plugins: [
31
- ...(config.plugins ?? []),
32
- new (require('@module-federation/node').UniversalFederationPlugin)({
33
- name: options.name,
34
- filename: 'remoteEntry.js',
35
- exposes: options.exposes,
36
- remotes: mappedRemotes,
37
- shared: {
38
- ...sharedDependencies,
39
- },
40
- library: {
41
- type: 'commonjs-module',
21
+ optimization: {
22
+ ...(config.optimization ?? {}),
23
+ runtimeChunk: false,
24
+ },
25
+ resolve: {
26
+ ...(config.resolve ?? {}),
27
+ alias: {
28
+ ...(config.resolve?.alias ?? {}),
29
+ ...sharedLibraries.getAliases(),
42
30
  },
43
- isServer: true,
44
- }, {}),
45
- sharedLibraries.getReplacementPlugin(),
46
- ],
47
- });
31
+ },
32
+ plugins: [
33
+ ...(config.plugins ?? []),
34
+ new (require('@module-federation/node').UniversalFederationPlugin)({
35
+ name: options.name,
36
+ filename: 'remoteEntry.js',
37
+ exposes: options.exposes,
38
+ remotes: mappedRemotes,
39
+ shared: {
40
+ ...sharedDependencies,
41
+ },
42
+ library: {
43
+ type: 'commonjs-module',
44
+ },
45
+ isServer: true,
46
+ /**
47
+ * Apply user-defined config override
48
+ */
49
+ ...(configOverride ? configOverride : {}),
50
+ runtimePlugins: process.env.NX_MF_DEV_REMOTES && options.useNxLibraryControlPlugin
51
+ ? [
52
+ ...(configOverride?.runtimePlugins ?? []),
53
+ require.resolve('@nx/webpack/src/utils/module-federation/plugins/runtime-library-control.plugin.js'),
54
+ ]
55
+ : configOverride?.runtimePlugins,
56
+ }, {}),
57
+ sharedLibraries.getReplacementPlugin(),
58
+ ],
59
+ };
60
+ if (process.env.NX_MF_DEV_REMOTES && options.useNxLibraryControlPlugin) {
61
+ // The env var is only set from the module-federation-dev-server
62
+ // Attach the runtime plugin
63
+ updatedConfig.plugins.push(new (require('webpack').DefinePlugin)({
64
+ 'process.env.NX_MF_DEV_REMOTES': process.env.NX_MF_DEV_REMOTES,
65
+ }));
66
+ }
67
+ return updatedConfig;
68
+ };
48
69
  }
49
70
  exports.withModuleFederationForSSR = withModuleFederationForSSR;
@@ -1,2 +1,2 @@
1
- import { ModuleFederationConfig } from '@nx/webpack/src/utils/module-federation';
2
- export declare function withModuleFederation(options: ModuleFederationConfig): Promise<(config: any) => any>;
1
+ import type { ModuleFederationConfig, NxModuleFederationConfigOverride } from '@nx/webpack/src/utils/module-federation';
2
+ export declare function withModuleFederation(options: ModuleFederationConfig, configOverride?: NxModuleFederationConfigOverride): Promise<(config: any) => any>;
@@ -1,52 +1,72 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.withModuleFederation = void 0;
4
- const tslib_1 = require("tslib");
5
4
  const utils_1 = require("./utils");
6
- const ModuleFederationPlugin_1 = tslib_1.__importDefault(require("webpack/lib/container/ModuleFederationPlugin"));
7
- async function withModuleFederation(options) {
5
+ const webpack_1 = require("@module-federation/enhanced/webpack");
6
+ async function withModuleFederation(options, configOverride) {
8
7
  if (global.NX_GRAPH_CREATION) {
9
8
  return (config) => config;
10
9
  }
10
+ options.useNxLibraryControlPlugin ??= true;
11
11
  const { sharedLibraries, sharedDependencies, mappedRemotes } = await (0, utils_1.getModuleFederationConfig)(options);
12
- return (config) => ({
13
- ...(config ?? {}),
14
- output: {
15
- ...(config.output ?? {}),
16
- uniqueName: options.name,
17
- publicPath: 'auto',
18
- },
19
- optimization: {
20
- ...(config.optimization ?? {}),
21
- runtimeChunk: false,
22
- },
23
- resolve: {
24
- ...(config.resolve ?? {}),
25
- alias: {
26
- ...(config.resolve?.alias ?? {}),
27
- ...sharedLibraries.getAliases(),
12
+ return (config) => {
13
+ const updatedConfig = {
14
+ ...(config ?? {}),
15
+ output: {
16
+ ...(config.output ?? {}),
17
+ uniqueName: options.name,
18
+ publicPath: 'auto',
28
19
  },
29
- },
30
- experiments: {
31
- ...(config.experiments ?? {}),
32
- outputModule: true,
33
- },
34
- plugins: [
35
- ...(config.plugins ?? []),
36
- new ModuleFederationPlugin_1.default({
37
- name: options.name,
38
- filename: 'remoteEntry.mjs',
39
- exposes: options.exposes,
40
- remotes: mappedRemotes,
41
- shared: {
42
- ...sharedDependencies,
43
- },
44
- library: {
45
- type: 'module',
20
+ optimization: {
21
+ ...(config.optimization ?? {}),
22
+ runtimeChunk: false,
23
+ },
24
+ resolve: {
25
+ ...(config.resolve ?? {}),
26
+ alias: {
27
+ ...(config.resolve?.alias ?? {}),
28
+ ...sharedLibraries.getAliases(),
46
29
  },
47
- }),
48
- sharedLibraries.getReplacementPlugin(),
49
- ],
50
- });
30
+ },
31
+ experiments: {
32
+ ...(config.experiments ?? {}),
33
+ outputModule: true,
34
+ },
35
+ plugins: [
36
+ ...(config.plugins ?? []),
37
+ new webpack_1.ModuleFederationPlugin({
38
+ name: options.name,
39
+ filename: 'remoteEntry.mjs',
40
+ exposes: options.exposes,
41
+ remotes: mappedRemotes,
42
+ shared: {
43
+ ...sharedDependencies,
44
+ },
45
+ library: {
46
+ type: 'module',
47
+ },
48
+ /**
49
+ * Apply user-defined config override
50
+ */
51
+ ...(configOverride ? configOverride : {}),
52
+ runtimePlugins: process.env.NX_MF_DEV_REMOTES && options.useNxLibraryControlPlugin
53
+ ? [
54
+ ...(configOverride?.runtimePlugins ?? []),
55
+ require.resolve('@nx/webpack/src/utils/module-federation/plugins/runtime-library-control.plugin.js'),
56
+ ]
57
+ : configOverride?.runtimePlugins,
58
+ }),
59
+ sharedLibraries.getReplacementPlugin(),
60
+ ],
61
+ };
62
+ if (process.env.NX_MF_DEV_REMOTES && options.useNxLibraryControlPlugin) {
63
+ // The env var is only set from the module-federation-dev-server
64
+ // Attach the runtime plugin
65
+ updatedConfig.plugins.push(new (require('webpack').DefinePlugin)({
66
+ 'process.env.NX_MF_DEV_REMOTES': process.env.NX_MF_DEV_REMOTES,
67
+ }));
68
+ }
69
+ return updatedConfig;
70
+ };
51
71
  }
52
72
  exports.withModuleFederation = withModuleFederation;
@@ -12,7 +12,8 @@ export declare const typesCorsVersion = "~2.8.5";
12
12
  export declare const expressVersion = "~4.18.2";
13
13
  export declare const typesExpressVersion = "4.17.14";
14
14
  export declare const browserSyncVersion = "^3.0.0";
15
- export declare const moduleFederationNodeVersion = "~1.0.5";
15
+ export declare const moduleFederationNodeVersion = "^2.3.0";
16
+ export declare const moduleFederationEnhancedVersion = "~0.2.3";
16
17
  export declare const angularEslintVersion = "^18.0.1";
17
18
  export declare const typescriptEslintVersion = "^8.0.0-alpha.28";
18
19
  export declare const tailwindVersion = "^3.0.2";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.jsoncEslintParserVersion = exports.jasmineMarblesVersion = exports.typesNodeVersion = exports.jestPresetAngularVersion = exports.tsNodeVersion = exports.autoprefixerVersion = exports.postcssUrlVersion = exports.postcssVersion = exports.tailwindVersion = exports.typescriptEslintVersion = exports.angularEslintVersion = exports.moduleFederationNodeVersion = exports.browserSyncVersion = exports.typesExpressVersion = exports.expressVersion = exports.typesCorsVersion = exports.corsVersion = exports.tsLibVersion = exports.angularJsVersion = exports.zoneJsVersion = exports.rxjsVersion = exports.ngrxVersion = exports.ngPackagrVersion = exports.angularDevkitVersion = exports.angularVersion = exports.nxVersion = void 0;
3
+ exports.jsoncEslintParserVersion = exports.jasmineMarblesVersion = exports.typesNodeVersion = exports.jestPresetAngularVersion = exports.tsNodeVersion = exports.autoprefixerVersion = exports.postcssUrlVersion = exports.postcssVersion = exports.tailwindVersion = exports.typescriptEslintVersion = exports.angularEslintVersion = exports.moduleFederationEnhancedVersion = exports.moduleFederationNodeVersion = exports.browserSyncVersion = exports.typesExpressVersion = exports.expressVersion = exports.typesCorsVersion = exports.corsVersion = exports.tsLibVersion = exports.angularJsVersion = exports.zoneJsVersion = exports.rxjsVersion = exports.ngrxVersion = exports.ngPackagrVersion = exports.angularDevkitVersion = exports.angularVersion = exports.nxVersion = void 0;
4
4
  exports.nxVersion = require('../../package.json').version;
5
5
  exports.angularVersion = '~18.0.0';
6
6
  exports.angularDevkitVersion = '~18.0.0';
@@ -15,7 +15,8 @@ exports.typesCorsVersion = '~2.8.5';
15
15
  exports.expressVersion = '~4.18.2';
16
16
  exports.typesExpressVersion = '4.17.14';
17
17
  exports.browserSyncVersion = '^3.0.0';
18
- exports.moduleFederationNodeVersion = '~1.0.5';
18
+ exports.moduleFederationNodeVersion = '^2.3.0';
19
+ exports.moduleFederationEnhancedVersion = '~0.2.3';
19
20
  exports.angularEslintVersion = '^18.0.1';
20
21
  exports.typescriptEslintVersion = '^8.0.0-alpha.28';
21
22
  exports.tailwindVersion = '^3.0.2';