Skip to content

Commit a9dea6b

Browse files
committed
feat(angular-rspack): support host option for the dev server
1 parent 4ece43d commit a9dea6b

File tree

5 files changed

+64
-26
lines changed

5 files changed

+64
-26
lines changed

e2e/fixtures/rspack-csr-css/rspack.config.js

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module.exports = () => {
2323
tsConfig: './tsconfig.app.json',
2424
skipTypeChecking: false,
2525
devServer: {
26+
host: '127.0.0.1',
2627
port: 8080,
2728
proxyConfig: './proxy.conf.json',
2829
},

packages/angular-rspack/src/lib/config/create-config.ts

+18-15
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,8 @@ export async function _createConfig(
198198
allowedHosts: 'auto',
199199
client: {
200200
webSocketURL: {
201-
hostname: 'localhost',
202-
port: normalizedOptions.devServer?.port ?? 4200,
201+
hostname: normalizedOptions.devServer.host,
202+
port: normalizedOptions.devServer.port,
203203
},
204204
overlay: {
205205
errors: true,
@@ -208,7 +208,8 @@ export async function _createConfig(
208208
},
209209
reconnect: true,
210210
},
211-
port: normalizedOptions.devServer?.port ?? 4200,
211+
host: normalizedOptions.devServer.host,
212+
port: normalizedOptions.devServer.port,
212213
hot: false,
213214
liveReload: true,
214215
watchFiles: ['./src/**/*.*', './public/**/*.*'],
@@ -221,18 +222,18 @@ export async function _createConfig(
221222
},
222223
server: {
223224
options:
224-
normalizedOptions.devServer?.sslKey &&
225-
normalizedOptions.devServer?.sslCert
225+
normalizedOptions.devServer.sslKey &&
226+
normalizedOptions.devServer.sslCert
226227
? {
227228
key: resolve(root, normalizedOptions.devServer.sslKey),
228229
cert: resolve(root, normalizedOptions.devServer.sslCert),
229230
}
230231
: {},
231-
type: normalizedOptions.devServer?.ssl ? 'https' : 'http',
232+
type: normalizedOptions.devServer.ssl ? 'https' : 'http',
232233
},
233234
proxy: await getProxyConfig(
234235
root,
235-
normalizedOptions.devServer?.proxyConfig
236+
normalizedOptions.devServer.proxyConfig
236237
),
237238
},
238239
optimization: {
@@ -323,8 +324,8 @@ export async function _createConfig(
323324
allowedHosts: 'auto',
324325
client: {
325326
webSocketURL: {
326-
hostname: 'localhost',
327-
port: options.devServer?.port ?? 4200,
327+
hostname: normalizedOptions.devServer.host,
328+
port: normalizedOptions.devServer.port,
328329
},
329330
overlay: {
330331
errors: true,
@@ -343,29 +344,31 @@ export async function _createConfig(
343344
devMiddleware: {
344345
writeToDisk: (file) => !file.includes('.hot-update.'),
345346
},
346-
port: options.devServer?.port ?? 4200,
347+
host: normalizedOptions.devServer.host,
348+
port: normalizedOptions.devServer.port,
347349
server: {
348350
options:
349-
normalizedOptions.devServer?.sslKey &&
350-
normalizedOptions.devServer?.sslCert
351+
normalizedOptions.devServer.sslKey &&
352+
normalizedOptions.devServer.sslCert
351353
? {
352354
key: resolve(root, normalizedOptions.devServer.sslKey),
353355
cert: resolve(root, normalizedOptions.devServer.sslCert),
354356
}
355357
: {},
356-
type: normalizedOptions.devServer?.ssl ? 'https' : 'http',
358+
type: normalizedOptions.devServer.ssl ? 'https' : 'http',
357359
},
358360
proxy: await getProxyConfig(
359361
root,
360-
normalizedOptions.devServer?.proxyConfig
362+
normalizedOptions.devServer.proxyConfig
361363
),
362364
onListening: (devServer) => {
363365
if (!devServer) {
364366
throw new Error('@rspack/dev-server is not defined');
365367
}
366368

367369
const port =
368-
(devServer.server?.address() as { port: number })?.port ?? 4200;
370+
(devServer.server?.address() as { port: number })?.port ??
371+
normalizedOptions.devServer.port;
369372
console.log('Listening on port:', port);
370373
},
371374
} as DevServer,

packages/angular-rspack/src/lib/config/create-config.unit.test.ts

+29-3
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ describe('createConfig', () => {
112112
globalScripts: scripts,
113113
globalStyles: styles,
114114
devServer: {
115+
host: 'localhost',
115116
port: 4200,
116117
},
117118
}),
@@ -234,15 +235,40 @@ describe('createConfig', () => {
234235
createConfig({
235236
options: {
236237
...configBase,
237-
devServer: {
238-
port: 8080,
239-
},
238+
devServer: { port: 8080 },
240239
},
241240
})
242241
).resolves.toStrictEqual([
243242
expect.objectContaining({
244243
devServer: expect.objectContaining({
245244
port: 8080,
245+
client: expect.objectContaining({
246+
webSocketURL: expect.objectContaining({
247+
port: 8080,
248+
}),
249+
}),
250+
}),
251+
}),
252+
]);
253+
});
254+
255+
it('should allow changing the devServer host', async () => {
256+
await expect(
257+
createConfig({
258+
options: {
259+
...configBase,
260+
devServer: { host: '0.0.0.0' },
261+
},
262+
})
263+
).resolves.toStrictEqual([
264+
expect.objectContaining({
265+
devServer: expect.objectContaining({
266+
host: '0.0.0.0',
267+
client: expect.objectContaining({
268+
webSocketURL: expect.objectContaining({
269+
hostname: '0.0.0.0',
270+
}),
271+
}),
246272
}),
247273
}),
248274
]);

packages/angular-rspack/src/lib/models/angular-rspack-plugin-options.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,22 @@ import type {
99
} from './unsupported-options';
1010

1111
export interface DevServerOptions extends DevServerUnsupportedOptions {
12+
host?: string;
1213
port?: number;
14+
proxyConfig?: string;
1315
ssl?: boolean;
14-
sslKey?: string;
1516
sslCert?: string;
16-
proxyConfig?: string;
17+
sslKey?: string;
18+
}
19+
export interface NormalizedDevServerOptions extends DevServerOptions {
20+
host: string;
21+
port: number;
1722
}
1823

1924
export interface OptimizationOptions {
25+
fonts?: boolean;
2026
scripts?: boolean;
2127
styles?: boolean;
22-
fonts?: boolean;
2328
}
2429

2530
export type OutputHashing = 'none' | 'all' | 'media' | 'bundles';
@@ -33,8 +38,8 @@ export type HashFormat = {
3338
export interface OutputPath {
3439
base: string;
3540
browser: string;
36-
server: string;
3741
media: string;
42+
server: string;
3843
}
3944

4045
export type AssetExpandedDefinition = {
@@ -55,9 +60,9 @@ export type ScriptOrStyleEntry =
5560
inject?: boolean;
5661
};
5762
export type GlobalEntry = {
58-
name: string;
5963
files: string[];
6064
initial: boolean;
65+
name: string;
6166
};
6267
export type IndexExpandedDefinition = {
6368
input: string;
@@ -122,7 +127,7 @@ export interface NormalizedAngularRspackPluginOptions
122127
assets: NormalizedAssetElement[];
123128
browser: string;
124129
commonChunk: boolean;
125-
devServer: DevServerOptions & { port: number };
130+
devServer: NormalizedDevServerOptions;
126131
extractLicenses: boolean;
127132
fileReplacements: FileReplacement[];
128133
globalScripts: GlobalEntry[];

packages/angular-rspack/src/lib/models/normalize-options.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import type {
2222
GlobalEntry,
2323
NormalizedAngularRspackPluginOptions,
2424
NormalizedAssetElement,
25+
NormalizedDevServerOptions,
2526
NormalizedIndexElement,
2627
OutputPath,
2728
ScriptOrStyleEntry,
@@ -293,15 +294,17 @@ function normalizeSourceMap(
293294

294295
function normalizeDevServer(
295296
devServer: DevServerOptions | undefined
296-
): DevServerOptions & { port: number } {
297+
): NormalizedDevServerOptions {
298+
const defaultHost = 'localhost';
297299
const defaultPort = 4200;
298300

299301
if (!devServer) {
300-
return { port: defaultPort };
302+
return { host: defaultHost, port: defaultPort };
301303
}
302304

303305
return {
304306
...devServer,
307+
host: devServer.host ?? defaultHost,
305308
port: devServer.port ?? defaultPort,
306309
};
307310
}

0 commit comments

Comments
 (0)