From 1187d681fb2af2cca55892b1b9c53520153e1dbe Mon Sep 17 00:00:00 2001 From: GiveMe-A-Name Date: Thu, 6 Feb 2025 15:03:43 +0800 Subject: [PATCH 1/4] fix(dev-server): apply dev configuration, then void dev.setupMiddlewares config lost --- .changeset/green-beans-provide.md | 6 ++++++ packages/solutions/app-tools/src/commands/dev.ts | 11 +++++++++-- tests/integration/dev-server/modern.config.ts | 15 +++++++++++++++ tests/integration/dev-server/tests/index.test.ts | 2 ++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 .changeset/green-beans-provide.md diff --git a/.changeset/green-beans-provide.md b/.changeset/green-beans-provide.md new file mode 100644 index 00000000000..82d116ee107 --- /dev/null +++ b/.changeset/green-beans-provide.md @@ -0,0 +1,6 @@ +--- +'@modern-js/app-tools': major +--- + +fix(dev-server): apply dev configuration, then void dev.setupMiddlewares config lost +fix(dev-server): 应用 dev 配置防止 dev.setupMiddlewares 丢失 diff --git a/packages/solutions/app-tools/src/commands/dev.ts b/packages/solutions/app-tools/src/commands/dev.ts index 782c0093156..14ea4462b41 100644 --- a/packages/solutions/app-tools/src/commands/dev.ts +++ b/packages/solutions/app-tools/src/commands/dev.ts @@ -92,10 +92,17 @@ export const dev = async ( const serverOptions = { metaName, dev: { + // [`normalizedConfig.tools.devServer`](https://modernjs.dev/en/configure/app/tools/dev-server.html) already deprecated, we should using `normalizedConfig.dev` instead firstly. + // Oterwise, the `normalizedConfig.dev` can't be apply correctly. + ...normalizedConfig.tools?.devServer, + devMiddleware: { + writeToDisk: normalizedConfig.dev.writeToDisk, + }, port, - https: normalizedConfig.dev.https, host: normalizedConfig.dev.host, - ...normalizedConfig.tools?.devServer, + https: normalizedConfig.dev.https, + hot: normalizedConfig.dev.hmr, + setupMiddlewares: normalizedConfig.dev.setupMiddlewares, }, appContext: { appDirectory, diff --git a/tests/integration/dev-server/modern.config.ts b/tests/integration/dev-server/modern.config.ts index 4c3ee2059be..75365d65bbf 100644 --- a/tests/integration/dev-server/modern.config.ts +++ b/tests/integration/dev-server/modern.config.ts @@ -37,6 +37,21 @@ export default applyBaseConfig({ ], }, }, + dev: { + setupMiddlewares: [ + (middlewares, _) => { + middlewares.push((req, res, next) => { + res.setHeader('x-push-middleware', 'test-middleware'); + return next(); + }); + + middlewares.unshift((req, res, next) => { + res.setHeader('x-unshift-middleware', 'test-middleware'); + return next(); + }); + }, + ], + }, runtime: { router: false, state: false, diff --git a/tests/integration/dev-server/tests/index.test.ts b/tests/integration/dev-server/tests/index.test.ts index 8988a617819..93377b1e6d0 100644 --- a/tests/integration/dev-server/tests/index.test.ts +++ b/tests/integration/dev-server/tests/index.test.ts @@ -30,6 +30,8 @@ describe('dev', () => { const headers = response!.headers(); expect(headers['x-config']).toBe('test-config'); expect(headers['x-plugin']).toBe('test-plugin'); + expect(headers['x-push-middleware']).toBe('test-middleware'); + expect(headers['x-unshift-middleware']).toBe('test-middleware'); }); test('should provide history api fallback correctly', async () => { From 46aa3d0b229f8fcbd3fb1714eaa2928a171d7ba4 Mon Sep 17 00:00:00 2001 From: GiveMe-A-Name Date: Thu, 6 Feb 2025 15:31:28 +0800 Subject: [PATCH 2/4] fix(dev-server): fallback to tools.devServer config when dev config is not provided --- packages/solutions/app-tools/src/commands/dev.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/solutions/app-tools/src/commands/dev.ts b/packages/solutions/app-tools/src/commands/dev.ts index 14ea4462b41..090aeb393b8 100644 --- a/packages/solutions/app-tools/src/commands/dev.ts +++ b/packages/solutions/app-tools/src/commands/dev.ts @@ -89,20 +89,24 @@ export const dev = async ( const pluginInstances = await loadServerPlugins(api, appDirectory, metaName); + const toolsDevServerConfig = normalizedConfig.tools.devServer; + const serverOptions = { metaName, dev: { // [`normalizedConfig.tools.devServer`](https://modernjs.dev/en/configure/app/tools/dev-server.html) already deprecated, we should using `normalizedConfig.dev` instead firstly. // Oterwise, the `normalizedConfig.dev` can't be apply correctly. - ...normalizedConfig.tools?.devServer, + ...toolsDevServerConfig, devMiddleware: { writeToDisk: normalizedConfig.dev.writeToDisk, }, port, - host: normalizedConfig.dev.host, - https: normalizedConfig.dev.https, - hot: normalizedConfig.dev.hmr, - setupMiddlewares: normalizedConfig.dev.setupMiddlewares, + host: normalizedConfig.dev.host ?? (toolsDevServerConfig as any).host, + https: normalizedConfig.dev.https ?? (toolsDevServerConfig as any).https, + hot: normalizedConfig.dev.hmr ?? (toolsDevServerConfig as any).hot, + setupMiddlewares: + normalizedConfig.dev.setupMiddlewares ?? + (toolsDevServerConfig as any).setupMiddlewares, }, appContext: { appDirectory, From 4a311bb0667e92579924d1498c769364c2c6caf4 Mon Sep 17 00:00:00 2001 From: GiveMe-A-Name Date: Thu, 6 Feb 2025 15:32:54 +0800 Subject: [PATCH 3/4] fix: update changeset --- .changeset/green-beans-provide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/green-beans-provide.md b/.changeset/green-beans-provide.md index 82d116ee107..3a2a4dd7b23 100644 --- a/.changeset/green-beans-provide.md +++ b/.changeset/green-beans-provide.md @@ -1,5 +1,5 @@ --- -'@modern-js/app-tools': major +'@modern-js/app-tools': patch --- fix(dev-server): apply dev configuration, then void dev.setupMiddlewares config lost From 0a88d2e69e11ac1593a3e7171e03bb9f173f1dbb Mon Sep 17 00:00:00 2001 From: GiveMe-A-Name Date: Thu, 6 Feb 2025 16:38:41 +0800 Subject: [PATCH 4/4] fix(dev-server): add optional chaining for tools.devServer config access --- packages/solutions/app-tools/src/commands/dev.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/solutions/app-tools/src/commands/dev.ts b/packages/solutions/app-tools/src/commands/dev.ts index 090aeb393b8..e2e93849aca 100644 --- a/packages/solutions/app-tools/src/commands/dev.ts +++ b/packages/solutions/app-tools/src/commands/dev.ts @@ -89,7 +89,7 @@ export const dev = async ( const pluginInstances = await loadServerPlugins(api, appDirectory, metaName); - const toolsDevServerConfig = normalizedConfig.tools.devServer; + const toolsDevServerConfig = normalizedConfig.tools?.devServer; const serverOptions = { metaName, @@ -101,12 +101,12 @@ export const dev = async ( writeToDisk: normalizedConfig.dev.writeToDisk, }, port, - host: normalizedConfig.dev.host ?? (toolsDevServerConfig as any).host, - https: normalizedConfig.dev.https ?? (toolsDevServerConfig as any).https, - hot: normalizedConfig.dev.hmr ?? (toolsDevServerConfig as any).hot, + host: normalizedConfig.dev.host ?? (toolsDevServerConfig as any)?.host, + https: normalizedConfig.dev.https ?? (toolsDevServerConfig as any)?.https, + hot: normalizedConfig.dev.hmr ?? (toolsDevServerConfig as any)?.hot, setupMiddlewares: normalizedConfig.dev.setupMiddlewares ?? - (toolsDevServerConfig as any).setupMiddlewares, + (toolsDevServerConfig as any)?.setupMiddlewares, }, appContext: { appDirectory,