@@ -2,7 +2,13 @@ import type { IncomingMessage, ServerResponse } from 'node:http';
22import { createRequire } from 'node:module' ;
33import type { Socket } from 'node:net' ;
44import { pathnameParse } from '../helpers/path' ;
5- import type { DevConfig , NextFunction , Rspack , ServerConfig } from '../types' ;
5+ import type {
6+ EnvironmentContext ,
7+ NextFunction ,
8+ DevConfig as OriginDevConfig ,
9+ Rspack ,
10+ ServerConfig ,
11+ } from '../types' ;
612import {
713 type DevMiddleware as CustomDevMiddleware ,
814 type DevMiddlewareAPI ,
@@ -15,11 +21,44 @@ const require = createRequire(import.meta.url);
1521
1622type Options = {
1723 publicPaths : string [ ] ;
18- dev : DevConfig ;
24+ environments : Record < string , EnvironmentContext > ;
25+ dev : OriginDevConfig ;
1926 server : ServerConfig ;
2027 compiler : Rspack . Compiler | Rspack . MultiCompiler ;
2128} ;
2229
30+ type DevConfig = Omit < OriginDevConfig , 'writeToDisk' > & {
31+ writeToDisk ?:
32+ | boolean
33+ | ( ( filename : string , compilationName ?: string ) => boolean ) ;
34+ } ;
35+
36+ // allow to configure dev.writeToDisk in environments
37+ const formatDevConfig = (
38+ config : OriginDevConfig ,
39+ environments : Record < string , EnvironmentContext > ,
40+ ) : DevConfig => {
41+ const writeToDiskValues = Object . values ( environments ) . map (
42+ ( env ) => env . config . dev . writeToDisk ,
43+ ) ;
44+ if ( new Set ( writeToDiskValues ) . size === 1 ) {
45+ return config ;
46+ }
47+
48+ return {
49+ ...config ,
50+ writeToDisk ( filePath : string , compilationName ?: string ) {
51+ let { writeToDisk } = config ;
52+ if ( compilationName && environments [ compilationName ] ) {
53+ writeToDisk =
54+ environments [ compilationName ] . config . dev . writeToDisk ?? writeToDisk ;
55+ }
56+ return typeof writeToDisk === 'function'
57+ ? writeToDisk ( filePath )
58+ : writeToDisk ! ;
59+ } ,
60+ } ;
61+ } ;
2362const noop = ( ) => {
2463 // noop
2564} ;
@@ -58,8 +97,8 @@ export class CompilerDevMiddleware {
5897
5998 private socketServer : SocketServer ;
6099
61- constructor ( { dev, server, compiler, publicPaths } : Options ) {
62- this . devConfig = dev ;
100+ constructor ( { dev, server, compiler, publicPaths, environments } : Options ) {
101+ this . devConfig = formatDevConfig ( dev , environments ) ;
63102 this . serverConfig = server ;
64103 this . compiler = compiler ;
65104 this . publicPaths = publicPaths ;
0 commit comments