From 34cca3b204e298ec390c5d3f7b5a46978043e1c9 Mon Sep 17 00:00:00 2001 From: Timeless0911 <1604889533@qq.com> Date: Thu, 19 Dec 2024 21:33:29 +0800 Subject: [PATCH 1/3] fix: pass server config to Rsbuild --- packages/core/src/cli/build.ts | 1 + packages/core/src/cli/inspect.ts | 1 + packages/core/src/cli/mf.ts | 7 +++ packages/core/src/config.ts | 1 + pnpm-lock.yaml | 4 ++ tests/integration/server/basic/package.json | 6 +++ .../integration/server/basic/public/logo.svg | 0 .../integration/server/basic/rslib.config.ts | 11 ++++ tests/integration/server/basic/src/index.ts | 1 + tests/integration/server/index.test.ts | 51 +++++++++++++++++++ tests/integration/server/mf-dev/package.json | 6 +++ .../integration/server/mf-dev/rslib.config.ts | 23 +++++++++ tests/integration/server/mf-dev/src/index.ts | 1 + 13 files changed, 113 insertions(+) create mode 100644 tests/integration/server/basic/package.json create mode 100644 tests/integration/server/basic/public/logo.svg create mode 100644 tests/integration/server/basic/rslib.config.ts create mode 100644 tests/integration/server/basic/src/index.ts create mode 100644 tests/integration/server/index.test.ts create mode 100644 tests/integration/server/mf-dev/package.json create mode 100644 tests/integration/server/mf-dev/rslib.config.ts create mode 100644 tests/integration/server/mf-dev/src/index.ts diff --git a/packages/core/src/cli/build.ts b/packages/core/src/cli/build.ts index b1a7ec41e..a44ce4688 100644 --- a/packages/core/src/cli/build.ts +++ b/packages/core/src/cli/build.ts @@ -12,6 +12,7 @@ export async function build( const rsbuildInstance = await createRsbuild({ rsbuildConfig: { plugins: config.plugins, + server: config.server, environments: pruneEnvironments(environments, options.lib), }, }); diff --git a/packages/core/src/cli/inspect.ts b/packages/core/src/cli/inspect.ts index 1710e8d74..350da1436 100644 --- a/packages/core/src/cli/inspect.ts +++ b/packages/core/src/cli/inspect.ts @@ -11,6 +11,7 @@ export async function inspect( const rsbuildInstance = await createRsbuild({ rsbuildConfig: { plugins: config.plugins, + server: config.server, environments: pruneEnvironments(environments, options.lib), }, }); diff --git a/packages/core/src/cli/mf.ts b/packages/core/src/cli/mf.ts index d2bfcc46c..353b9ff4f 100644 --- a/packages/core/src/cli/mf.ts +++ b/packages/core/src/cli/mf.ts @@ -1,5 +1,6 @@ import { createRsbuild, mergeRsbuildConfig } from '@rsbuild/core'; import type { RsbuildConfig, RsbuildInstance } from '@rsbuild/core'; +import merge from 'node_modules/@rsbuild/core/compiled/webpack-merge'; import { composeCreateRsbuildConfig } from '../config'; import type { RslibConfig } from '../types'; import { onBeforeRestart } from './restart'; @@ -33,8 +34,14 @@ async function initMFRsbuild( ...(rslibConfig.plugins || []), ...(mfRsbuildConfig.config.plugins || []), ], + server: mergeRsbuildConfig( + rslibConfig.server, + mfRsbuildConfig.config.server, + ), }, }); + console.log('rslibConfig.server: ', rslibConfig.server); + console.log('mfRsbuildConfig.config.server: ', mfRsbuildConfig.config.server); const devServer = await rsbuildInstance.startDevServer(); onBeforeRestart(devServer.server.close); diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index 0e6af6556..7d9f23292 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -1335,6 +1335,7 @@ export async function composeCreateRsbuildConfig( const { lib: libConfigsArray, plugins: sharedPlugins, + server, ...sharedRsbuildConfig } = rslibConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd9054fdf..f16f76e13 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -750,6 +750,10 @@ importers: tests/integration/resolve/with-main-fields: {} + tests/integration/server/basic: {} + + tests/integration/server/mf-dev: {} + tests/integration/shims/cjs: {} tests/integration/shims/esm: {} diff --git a/tests/integration/server/basic/package.json b/tests/integration/server/basic/package.json new file mode 100644 index 000000000..047f31a02 --- /dev/null +++ b/tests/integration/server/basic/package.json @@ -0,0 +1,6 @@ +{ + "name": "server-basic-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/server/basic/public/logo.svg b/tests/integration/server/basic/public/logo.svg new file mode 100644 index 000000000..e69de29bb diff --git a/tests/integration/server/basic/rslib.config.ts b/tests/integration/server/basic/rslib.config.ts new file mode 100644 index 000000000..1b74d620b --- /dev/null +++ b/tests/integration/server/basic/rslib.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [generateBundleEsmConfig()], + server: { + publicDir: { + copyOnBuild: false, + }, + }, +}); diff --git a/tests/integration/server/basic/src/index.ts b/tests/integration/server/basic/src/index.ts new file mode 100644 index 000000000..3329a7d97 --- /dev/null +++ b/tests/integration/server/basic/src/index.ts @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/tests/integration/server/index.test.ts b/tests/integration/server/index.test.ts new file mode 100644 index 000000000..54ac03517 --- /dev/null +++ b/tests/integration/server/index.test.ts @@ -0,0 +1,51 @@ +import { exec } from 'node:child_process'; +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; +import fse from 'fs-extra'; +import { awaitFileExists, buildAndGetResults } from 'test-helper'; +import { describe, expect, test } from 'vitest'; + +describe('server config', async () => { + test('basic config', async () => { + const fixturePath = join(__dirname, 'basic'); + await buildAndGetResults({ fixturePath }); + + // Check if logo.svg in public is copied to dist/esm + const logoPath = join(__dirname, 'dist', 'esm', 'logo.svg'); + const logoExists = existsSync(logoPath); + expect(logoExists).toBe(false); + }); + + test('mf dev command', async () => { + const fixturePath = join(__dirname, 'mf-dev'); + const distPath = join(fixturePath, 'dist'); + const rsbuildConfigFile = join(distPath, '.rsbuild/rsbuild.config.mjs'); + fse.removeSync(distPath); + + const childProcess = exec('npx rslib mf dev', { + cwd: fixturePath, + env: { + ...process.env, + DEBUG: 'rsbuild', + }, + }); + + await awaitFileExists(rsbuildConfigFile); + childProcess.kill(); + + // Check if the server config is merged correctly + const rsbuildConfig = await import(rsbuildConfigFile); + expect(rsbuildConfig.default.server).toMatchInlineSnapshot(` + { + "base": "/", + "compress": true, + "host": "0.0.0.0", + "htmlFallback": "index", + "open": true, + "port": 3002, + "printUrls": false, + "strictPort": false, + } + `); + }); +}); diff --git a/tests/integration/server/mf-dev/package.json b/tests/integration/server/mf-dev/package.json new file mode 100644 index 000000000..d5a4cfb97 --- /dev/null +++ b/tests/integration/server/mf-dev/package.json @@ -0,0 +1,6 @@ +{ + "name": "server-mf-dev-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/server/mf-dev/rslib.config.ts b/tests/integration/server/mf-dev/rslib.config.ts new file mode 100644 index 000000000..3ad7e4e96 --- /dev/null +++ b/tests/integration/server/mf-dev/rslib.config.ts @@ -0,0 +1,23 @@ +import { pluginModuleFederation } from '@module-federation/rsbuild-plugin'; +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + lib: [ + { + format: 'mf', + server: { + port: 3002, + printUrls: false, + }, + }, + ], + server: { + port: 3001, + open: true, + }, + plugins: [ + pluginModuleFederation({ + name: 'test', + }), + ], +}); diff --git a/tests/integration/server/mf-dev/src/index.ts b/tests/integration/server/mf-dev/src/index.ts new file mode 100644 index 000000000..3329a7d97 --- /dev/null +++ b/tests/integration/server/mf-dev/src/index.ts @@ -0,0 +1 @@ +export const foo = 'foo'; From b8bcb49035d1d7a08ce554cc442e531388a1da95 Mon Sep 17 00:00:00 2001 From: Timeless0911 <1604889533@qq.com> Date: Thu, 19 Dec 2024 21:38:08 +0800 Subject: [PATCH 2/3] chore: update --- packages/core/src/cli/mf.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/core/src/cli/mf.ts b/packages/core/src/cli/mf.ts index 353b9ff4f..42d99e370 100644 --- a/packages/core/src/cli/mf.ts +++ b/packages/core/src/cli/mf.ts @@ -1,6 +1,5 @@ import { createRsbuild, mergeRsbuildConfig } from '@rsbuild/core'; import type { RsbuildConfig, RsbuildInstance } from '@rsbuild/core'; -import merge from 'node_modules/@rsbuild/core/compiled/webpack-merge'; import { composeCreateRsbuildConfig } from '../config'; import type { RslibConfig } from '../types'; import { onBeforeRestart } from './restart'; @@ -40,8 +39,7 @@ async function initMFRsbuild( ), }, }); - console.log('rslibConfig.server: ', rslibConfig.server); - console.log('mfRsbuildConfig.config.server: ', mfRsbuildConfig.config.server); + const devServer = await rsbuildInstance.startDevServer(); onBeforeRestart(devServer.server.close); From e168e55d918a277afe2cd163854ccbedc7eb1ae3 Mon Sep 17 00:00:00 2001 From: Timeless0911 <1604889533@qq.com> Date: Thu, 19 Dec 2024 21:51:58 +0800 Subject: [PATCH 3/3] chore: update --- tests/integration/server/index.test.ts | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/tests/integration/server/index.test.ts b/tests/integration/server/index.test.ts index 54ac03517..6b6d49476 100644 --- a/tests/integration/server/index.test.ts +++ b/tests/integration/server/index.test.ts @@ -34,18 +34,10 @@ describe('server config', async () => { childProcess.kill(); // Check if the server config is merged correctly - const rsbuildConfig = await import(rsbuildConfigFile); - expect(rsbuildConfig.default.server).toMatchInlineSnapshot(` - { - "base": "/", - "compress": true, - "host": "0.0.0.0", - "htmlFallback": "index", - "open": true, - "port": 3002, - "printUrls": false, - "strictPort": false, - } - `); + const rsbuildConfigContent = await fse.readFile(rsbuildConfigFile, 'utf-8'); + expect(rsbuildConfigContent).toContain(`base: '/'`); + expect(rsbuildConfigContent).toContain('open: true'); + expect(rsbuildConfigContent).toContain('port: 3002'); + expect(rsbuildConfigContent).toContain('printUrls: false'); }); });