diff --git a/e2e/fixtures/rsbuild-csr-css/rsbuild.config.ts b/e2e/fixtures/rsbuild-csr-css/rsbuild.config.ts index eb574a6..9017f17 100644 --- a/e2e/fixtures/rsbuild-csr-css/rsbuild.config.ts +++ b/e2e/fixtures/rsbuild-csr-css/rsbuild.config.ts @@ -6,6 +6,9 @@ export default () => { browser: './src/main.ts', inlineStylesExtension: 'css', outputPath: './build', + define: { + nxAngularRsbuild: '"20.6.2"', + }, }, }); } diff --git a/e2e/fixtures/rsbuild-csr-css/src/app/app.component.html b/e2e/fixtures/rsbuild-csr-css/src/app/app.component.html index 2339c6a..e4b7fd7 100644 --- a/e2e/fixtures/rsbuild-csr-css/src/app/app.component.html +++ b/e2e/fixtures/rsbuild-csr-css/src/app/app.component.html @@ -1,2 +1,3 @@ +

@nx/angular-rsbuild v{{ ngAngularRsbuildVersion }}

diff --git a/e2e/fixtures/rsbuild-csr-css/src/app/app.component.ts b/e2e/fixtures/rsbuild-csr-css/src/app/app.component.ts index 9b0d520..46f4a58 100644 --- a/e2e/fixtures/rsbuild-csr-css/src/app/app.component.ts +++ b/e2e/fixtures/rsbuild-csr-css/src/app/app.component.ts @@ -2,6 +2,8 @@ import { Component } from '@angular/core'; import { RouterModule } from '@angular/router'; import { NxWelcomeComponent } from './nx-welcome.component'; +declare const nxAngularRsbuild: string; + @Component({ imports: [NxWelcomeComponent, RouterModule], selector: 'app-root', @@ -10,4 +12,5 @@ import { NxWelcomeComponent } from './nx-welcome.component'; }) export class AppComponent { title = 'rsbuild-csr-css'; + ngAngularRsbuildVersion = nxAngularRsbuild; } diff --git a/e2e/fixtures/rspack-csr-css/rspack.config.js b/e2e/fixtures/rspack-csr-css/rspack.config.js index 466cb11..dcd5d8c 100644 --- a/e2e/fixtures/rspack-csr-css/rspack.config.js +++ b/e2e/fixtures/rspack-csr-css/rspack.config.js @@ -34,6 +34,9 @@ module.exports = () => { port: 8080, proxyConfig: './proxy.conf.json', }, + define: { + nxAngularRspack: '"20.6.2"', + }, }, }, { diff --git a/e2e/fixtures/rspack-csr-css/src/app/app.component.html b/e2e/fixtures/rspack-csr-css/src/app/app.component.html index 3305573..28a3d32 100644 --- a/e2e/fixtures/rspack-csr-css/src/app/app.component.html +++ b/e2e/fixtures/rspack-csr-css/src/app/app.component.html @@ -1,3 +1,4 @@ +

@nx/angular-rspack v{{ nxAngularRspackVersion }}

{{ greeting$ | async }}

 

diff --git a/e2e/fixtures/rspack-csr-css/src/app/app.component.ts b/e2e/fixtures/rspack-csr-css/src/app/app.component.ts index 24ae095..6dc1b49 100644 --- a/e2e/fixtures/rspack-csr-css/src/app/app.component.ts +++ b/e2e/fixtures/rspack-csr-css/src/app/app.component.ts @@ -6,6 +6,8 @@ import { ApiService } from './api.service'; import { NxWelcomeComponent } from './nx-welcome.component'; import { ScssInlineTestComponent } from './scss-inline-test'; +declare const nxAngularRspack: string; + @Component({ imports: [ NxWelcomeComponent, @@ -20,6 +22,7 @@ import { ScssInlineTestComponent } from './scss-inline-test'; export class AppComponent implements OnInit { title = 'rsbuild-csr-css'; greeting$!: Observable; + nxAngularRspackVersion = nxAngularRspack; constructor(private readonly apiService: ApiService) {} diff --git a/packages/angular-rsbuild/src/lib/config/create-config.ts b/packages/angular-rsbuild/src/lib/config/create-config.ts index 174145d..26dd6a4 100644 --- a/packages/angular-rsbuild/src/lib/config/create-config.ts +++ b/packages/angular-rsbuild/src/lib/config/create-config.ts @@ -154,6 +154,7 @@ export async function _createConfig( define: { ...(isProd ? { ngDevMode: 'false' } : undefined), ngJitMode: normalizedOptions.aot ? undefined : 'true', // @TODO: use normalizedOptions + ...normalizedOptions.define, }, }, output: { @@ -194,6 +195,7 @@ export async function _createConfig( ngServerMode: true, ...(isProd ? { ngDevMode: 'false' } : undefined), ngJitMode: normalizedOptions.aot ? undefined : 'true', // @TODO: use normalizedOptions + ...normalizedOptions.define, }, }, output: { diff --git a/packages/angular-rsbuild/src/lib/models/normalize-options.ts b/packages/angular-rsbuild/src/lib/models/normalize-options.ts index cb0334b..eea9b5c 100644 --- a/packages/angular-rsbuild/src/lib/models/normalize-options.ts +++ b/packages/angular-rsbuild/src/lib/models/normalize-options.ts @@ -88,6 +88,7 @@ function validateChunkOptions(options: Partial) { export const DEFAULT_PLUGIN_ANGULAR_OPTIONS: PluginAngularOptions = { index: './src/index.html', browser: './src/main.ts', + define: {}, server: undefined, ssr: undefined, fileReplacements: [], @@ -121,6 +122,7 @@ export function normalizeOptions( ssr, optimization, devServer, + define, ...restOptions } = options; @@ -150,6 +152,7 @@ export function normalizeOptions( ...restOptions, ...(server != null ? { server } : {}), ...(ssr != null ? { ssr: normalizedSsr } : {}), + ...(define != null ? { define } : {}), optimization: normalizedOptimization, outputPath: normalizeOutputPath(root, options.outputPath), sourceMap: normalizeSourceMap(options.sourceMap), diff --git a/packages/angular-rsbuild/src/lib/models/plugin-options.ts b/packages/angular-rsbuild/src/lib/models/plugin-options.ts index f4d9e2d..cbf3a66 100644 --- a/packages/angular-rsbuild/src/lib/models/plugin-options.ts +++ b/packages/angular-rsbuild/src/lib/models/plugin-options.ts @@ -43,6 +43,12 @@ export interface SourceMap { export interface PluginAngularOptions { index: string; browser: string; + /** + * Defines global identifiers that will be replaced with a specified constant value when found in any JavaScript or TypeScript code including libraries. + * The value will be used directly. + * String values must be put in quotes. + */ + define?: Record; server?: string; ssr?: | boolean diff --git a/packages/angular-rspack/src/lib/models/angular-rspack-plugin-options.ts b/packages/angular-rspack/src/lib/models/angular-rspack-plugin-options.ts index bac04fe..193a45b 100644 --- a/packages/angular-rspack/src/lib/models/angular-rspack-plugin-options.ts +++ b/packages/angular-rspack/src/lib/models/angular-rspack-plugin-options.ts @@ -90,6 +90,12 @@ export interface AngularRspackPluginOptions extends PluginUnsupportedOptions { assets?: AssetElement[]; browser?: string; commonChunk?: boolean; + /** + * Defines global identifiers that will be replaced with a specified constant value when found in any JavaScript or TypeScript code including libraries. + * The value will be used directly. + * String values must be put in quotes. + */ + define?: Record; devServer?: DevServerOptions; extractLicenses?: boolean; fileReplacements?: FileReplacement[]; diff --git a/packages/angular-rspack/src/lib/models/normalize-options.ts b/packages/angular-rspack/src/lib/models/normalize-options.ts index a1d6fbf..396cf66 100644 --- a/packages/angular-rspack/src/lib/models/normalize-options.ts +++ b/packages/angular-rspack/src/lib/models/normalize-options.ts @@ -242,6 +242,7 @@ export function normalizeOptions( aot, browser: options.browser ?? './src/main.ts', commonChunk: options.commonChunk ?? true, + define: options.define ?? {}, devServer: normalizeDevServer(options.devServer), extractLicenses: options.extractLicenses ?? true, fileReplacements: resolveFileReplacements(fileReplacements, root), diff --git a/packages/angular-rspack/src/lib/models/unsupported-options.ts b/packages/angular-rspack/src/lib/models/unsupported-options.ts index 81416aa..8686dc1 100644 --- a/packages/angular-rspack/src/lib/models/unsupported-options.ts +++ b/packages/angular-rspack/src/lib/models/unsupported-options.ts @@ -43,7 +43,6 @@ export interface PluginUnsupportedOptions { }; externalDependencies?: string[]; clearScreen?: boolean; - define?: Record; baseHref?: string; verbose?: boolean; progress?: boolean; @@ -76,7 +75,6 @@ export const TOP_LEVEL_OPTIONS_PENDING_SUPPORT = [ 'security', 'externalDependencies', 'clearScreen', - 'define', 'baseHref', 'verbose', 'progress', diff --git a/packages/angular-rspack/src/lib/plugins/ng-rspack.ts b/packages/angular-rspack/src/lib/plugins/ng-rspack.ts index 4ecc702..0b255b5 100644 --- a/packages/angular-rspack/src/lib/plugins/ng-rspack.ts +++ b/packages/angular-rspack/src/lib/plugins/ng-rspack.ts @@ -72,6 +72,7 @@ export class NgRspackPlugin implements RspackPluginInstance { ngDevMode: isProduction ? 'false' : {}, ngJitMode: this.pluginOptions.aot ? undefined : 'true', ngServerMode: this.pluginOptions.hasServer, + ...(this.pluginOptions.define ?? {}), }).apply(compiler); if (this.pluginOptions.assets) { new CopyRspackPlugin({