From 9f11c06e7927543e0ebbfd33b028be1b193489b5 Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 15 Mar 2026 21:09:40 +0800 Subject: [PATCH 1/4] refactor: migrate from webpack-dev-middleware to @rspack/dev-middleware --- package.json | 6 +- pnpm-lock.yaml | 351 ++---------------------------------------- rslib.config.ts | 1 - src/server.ts | 25 ++- src/types.ts | 4 +- tests/e2e/app.test.js | 14 +- 6 files changed, 40 insertions(+), 361 deletions(-) diff --git a/package.json b/package.json index 5dcc207..df48b70 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ ] }, "dependencies": { + "@rspack/dev-middleware": "2.0.0-beta.1", "@types/ws": "^8.18.1", "chokidar": "^5.0.0", "connect-history-api-fallback": "^2.0.0", @@ -52,7 +53,6 @@ "http-proxy-middleware": "^3.0.5", "ipaddr.js": "^2.3.0", "serve-static": "^2.2.1", - "webpack-dev-middleware": "^7.4.5", "ws": "^8.19.0" }, "devDependencies": { @@ -60,6 +60,7 @@ "@hono/node-server": "^1.19.11", "@rslib/core": "^0.20.0", "@rspack/core": "2.0.0-beta.6", + "@rspack/dev-middleware": "^7.4.5", "@rspack/plugin-react-refresh": "1.6.1", "@rstest/core": "^0.9.2", "@types/mime-types": "3.0.1", @@ -84,8 +85,7 @@ "selfsigned": "^5.5.0", "simple-git-hooks": "^2.13.1", "style-loader": "^4.0.0", - "typescript": "^5.9.3", - "webpack-dev-middleware": "^7.4.5" + "typescript": "^5.9.3" }, "peerDependencies": { "@rspack/core": "^2.0.0-0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c067edf..81d54a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@rspack/dev-middleware': + specifier: 2.0.0-beta.1 + version: 2.0.0-beta.1(@rspack/core@2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19)) '@types/ws': specifier: ^8.18.1 version: 8.18.1 @@ -29,9 +32,6 @@ importers: serve-static: specifier: ^2.2.1 version: 2.2.1 - webpack-dev-middleware: - specifier: ^7.4.5 - version: 7.4.5(tslib@2.8.1)(webpack@5.105.3) ws: specifier: ^8.19.0 version: 8.19.0 @@ -313,126 +313,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/base64@17.67.0': - resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/buffers@1.2.1': - resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/buffers@17.67.0': - resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/codegen@1.0.0': - resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/codegen@17.67.0': - resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-core@4.56.10': - resolution: {integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-fsa@4.56.10': - resolution: {integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node-builtins@4.56.10': - resolution: {integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node-to-fsa@4.56.10': - resolution: {integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node-utils@4.56.10': - resolution: {integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node@4.56.10': - resolution: {integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-print@4.56.10': - resolution: {integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-snapshot@4.56.10': - resolution: {integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@1.21.0': - resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@17.67.0': - resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pointer@1.0.2': - resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pointer@17.67.0': - resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@1.9.0': - resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@17.67.0': - resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - '@module-federation/error-codes@2.1.0': resolution: {integrity: sha512-W+uCmPsFuV+15E1S7JUB1AeUDBFqKjJ2hImXdBNYx7T1CGM6awS/veooXqNoP7iM/kwKjtpTQPIeccWLrq76Mg==} @@ -598,6 +478,15 @@ packages: '@swc/helpers': optional: true + '@rspack/dev-middleware@2.0.0-beta.1': + resolution: {integrity: sha512-XEr0Aa1u/8Y5PmvQcbfwVfztdPt/CjjV5SdLIM8046hQjmRFMOmkQ9p32OdlUvSFWAdpABsHIsfIcClVh2eaLw==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rspack/core': ^2.0.0-0 + peerDependenciesMeta: + '@rspack/core': + optional: true + '@rspack/plugin-react-refresh@1.6.1': resolution: {integrity: sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw==} peerDependencies: @@ -915,9 +804,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1200,12 +1086,6 @@ packages: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} - glob-to-regex.js@1.2.0: - resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -1263,10 +1143,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} @@ -1392,11 +1268,6 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memfs@4.56.10: - resolution: {integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==} - peerDependencies: - tslib: '2' - merge-descriptors@2.0.0: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} @@ -1810,12 +1681,6 @@ packages: text-decoder@1.2.0: resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} - thingies@2.5.0: - resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 - tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -1828,12 +1693,6 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tree-dump@1.1.0: - resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -1887,15 +1746,6 @@ packages: webdriver-bidi-protocol@0.4.1: resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} - webpack-dev-middleware@7.4.5: - resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - webpack-sources@3.3.4: resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} engines: {node: '>=10.13.0'} @@ -2089,133 +1939,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/base64@17.67.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/buffers@17.67.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/codegen@17.67.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/fs-core@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-fsa@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-node-builtins@4.56.10(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/fs-node-to-fsa@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-node-utils@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-node@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) - glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-print@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-snapshot@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) - '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@17.67.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pointer@17.67.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@17.67.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) - tslib: 2.8.1 - '@module-federation/error-codes@2.1.0': {} '@module-federation/runtime-core@2.1.0': @@ -2434,6 +2157,10 @@ snapshots: '@module-federation/runtime-tools': 2.1.0 '@swc/helpers': 0.5.19 + '@rspack/dev-middleware@2.0.0-beta.1(@rspack/core@2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19))': + optionalDependencies: + '@rspack/core': 2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19) + '@rspack/plugin-react-refresh@1.6.1(react-refresh@0.18.0)': dependencies: error-stack-parser: 2.1.4 @@ -2771,8 +2498,6 @@ snapshots: color-name@1.1.4: {} - colorette@2.0.20: {} - commander@2.20.3: {} connect-history-api-fallback@2.0.0: {} @@ -3062,10 +2787,6 @@ snapshots: transitivePeerDependencies: - supports-color - glob-to-regex.js@1.2.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - glob-to-regexp@0.4.1: {} gopd@1.2.0: {} @@ -3129,8 +2850,6 @@ snapshots: transitivePeerDependencies: - supports-color - hyperdyperid@1.2.0: {} - iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -3226,23 +2945,6 @@ snapshots: media-typer@1.1.0: {} - memfs@4.56.10(tslib@2.8.1): - dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-to-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - merge-descriptors@2.0.0: {} merge-stream@2.0.0: {} @@ -3687,10 +3389,6 @@ snapshots: dependencies: b4a: 1.6.6 - thingies@2.5.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - tinypool@2.1.0: {} to-regex-range@5.0.1: @@ -3699,10 +3397,6 @@ snapshots: toidentifier@1.0.1: {} - tree-dump@1.1.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - tslib@1.14.1: {} tslib@2.8.1: {} @@ -3744,19 +3438,6 @@ snapshots: webdriver-bidi-protocol@0.4.1: {} - webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.3): - dependencies: - colorette: 2.0.20 - memfs: 4.56.10(tslib@2.8.1) - mime-types: 3.0.2 - on-finished: 2.4.1 - range-parser: 1.2.1 - schema-utils: 4.3.3 - optionalDependencies: - webpack: 5.105.3 - transitivePeerDependencies: - - tslib - webpack-sources@3.3.4: {} webpack@5.105.3: diff --git a/rslib.config.ts b/rslib.config.ts index eeaecb8..d107ef0 100644 --- a/rslib.config.ts +++ b/rslib.config.ts @@ -10,7 +10,6 @@ export default defineConfig({ externals: { 'connect-history-api-fallback': 'commonjs connect-history-api-fallback', - 'webpack-dev-middleware': 'commonjs webpack-dev-middleware', 'http-proxy-middleware': 'commonjs http-proxy-middleware', 'serve-static': 'commonjs serve-static', selfsigned: 'commonjs selfsigned', diff --git a/src/server.ts b/src/server.ts index 0122262..f55ddc6 100644 --- a/src/server.ts +++ b/src/server.ts @@ -36,6 +36,7 @@ import ipaddr from 'ipaddr.js'; import type { App } from 'open'; import { getPort } from './getPort'; import { WebsocketServer } from './servers/WebsocketServer'; +import { devMiddleware } from '@rspack/dev-middleware'; import type { AddressInfo, BasicApplication, @@ -211,7 +212,7 @@ class Server< isTlsServer = false; webSocketServer: WebSocketServerImplementation | null | undefined; middleware: - | import('webpack-dev-middleware').API + | import('@rspack/dev-middleware').API | undefined; server: S | undefined; app: A | undefined; @@ -1648,7 +1649,7 @@ class Server< } middlewares.push({ - name: 'webpack-dev-middleware', + name: '@rspack/dev-middleware', middleware: this.middleware as DevServerMiddlewareHandler, }); @@ -1878,7 +1879,7 @@ class Server< } middlewares.push({ - name: 'webpack-dev-middleware', + name: '@rspack/dev-middleware', middleware: this.middleware as DevServerMiddlewareHandler, }); } @@ -1927,7 +1928,7 @@ class Server< // include our middleware to ensure // it is able to handle '/index.html' request after redirect middlewares.push({ - name: 'webpack-dev-middleware', + name: '@rspack/dev-middleware', middleware: this.middleware as DevServerMiddlewareHandler, }); @@ -1966,23 +1967,21 @@ class Server< middlewares = this.options.setupMiddlewares(middlewares, this); } - // Lazy init webpack dev middleware + // Lazy init Rspack dev middleware const lazyInitDevMiddleware = () => { if (!this.middleware) { - const webpackDevMiddleware = require('webpack-dev-middleware'); - - // middleware for serving webpack bundle - this.middleware = webpackDevMiddleware( + // middleware for serving Rspack bundle + this.middleware = devMiddleware( this.compiler, this.options.devMiddleware, - ) as import('webpack-dev-middleware').API; + ) as import('@rspack/dev-middleware').API; } return this.middleware; }; for (const i of middlewares) { - if (i.name === 'webpack-dev-middleware') { + if (i.name === '@rspack/dev-middleware') { const item = i as MiddlewareObject | RequestHandler; if (typeof (item as MiddlewareObject).middleware === 'undefined') { @@ -2556,7 +2555,7 @@ class Server< this.staticWatchers.push(watcher); } - invalidate(callback: import('webpack-dev-middleware').Callback = () => {}) { + invalidate(callback: import('@rspack/dev-middleware').Callback = () => {}) { if (this.middleware) { this.middleware.invalidate(callback); } @@ -2683,7 +2682,7 @@ class Server< if (this.middleware) { await new Promise((resolve, reject) => { ( - this.middleware as import('webpack-dev-middleware').API< + this.middleware as import('@rspack/dev-middleware').API< Request, Response > diff --git a/src/types.ts b/src/types.ts index 8c48463..bdd7ed0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -65,11 +65,11 @@ export type Response = ServerResponse; export type DevMiddlewareOptions< T extends Request, U extends Response, -> = import('webpack-dev-middleware').Options; +> = import('@rspack/dev-middleware').Options; export type DevMiddlewareContext< T extends Request, U extends Response, -> = import('webpack-dev-middleware').Context; +> = import('@rspack/dev-middleware').Context; export type Port = number | LiteralUnion<'auto', string>; diff --git a/tests/e2e/app.test.js b/tests/e2e/app.test.js index 6cc98af..780092a 100644 --- a/tests/e2e/app.test.js +++ b/tests/e2e/app.test.js @@ -1,7 +1,7 @@ const fs = require('node:fs'); const path = require('node:path'); const { rspack } = require('@rspack/core'); -const wdm = require('webpack-dev-middleware'); +const { devMiddleware } = require('@rspack/dev-middleware'); const { RspackDevServer: Server } = require('@rspack/dev-server'); const config = require('../fixtures/client-config/rspack.config'); const runBrowser = require('../helpers/run-browser'); @@ -31,8 +31,8 @@ const apps = [ }), (_, devServer) => [ { - name: 'webpack-dev-middleware', - middleware: wdm.honoWrapper(devServer.compiler), + name: '@rspack/dev-middleware', + middleware: devMiddleware.honoWrapper(devServer.compiler), }, ], ], @@ -54,8 +54,8 @@ const apps = [ }), (_, devServer) => [ { - name: 'webpack-dev-middleware', - middleware: wdm.honoWrapper(devServer.compiler), + name: '@rspack/dev-middleware', + middleware: devMiddleware.honoWrapper(devServer.compiler), }, ], ], @@ -81,8 +81,8 @@ const apps = [ }, (_, devServer) => [ { - name: 'webpack-dev-middleware', - middleware: wdm.honoWrapper(devServer.compiler), + name: '@rspack/dev-middleware', + middleware: devMiddleware.honoWrapper(devServer.compiler), }, ], ], From 7318162e768bf9c2fc8c970d234de9ba9f7b23fb Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 15 Mar 2026 21:11:19 +0800 Subject: [PATCH 2/4] fix --- src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server.ts b/src/server.ts index f55ddc6..e963bb0 100644 --- a/src/server.ts +++ b/src/server.ts @@ -25,6 +25,7 @@ import type { DevServerStaticItem, DevServerWebSocketURL, } from '@rspack/core'; +import { devMiddleware } from '@rspack/dev-middleware'; import type { HandleFunction, NextFunction, @@ -36,7 +37,6 @@ import ipaddr from 'ipaddr.js'; import type { App } from 'open'; import { getPort } from './getPort'; import { WebsocketServer } from './servers/WebsocketServer'; -import { devMiddleware } from '@rspack/dev-middleware'; import type { AddressInfo, BasicApplication, From ef7445c6b78d93690e6a6ce72ed23be498d9b807 Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 15 Mar 2026 21:16:59 +0800 Subject: [PATCH 3/4] fix --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index df48b70..1b2132c 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,6 @@ "@hono/node-server": "^1.19.11", "@rslib/core": "^0.20.0", "@rspack/core": "2.0.0-beta.6", - "@rspack/dev-middleware": "^7.4.5", "@rspack/plugin-react-refresh": "1.6.1", "@rstest/core": "^0.9.2", "@types/mime-types": "3.0.1", From 2c5d1feb55b760092de84f1918d7e074d7418ddb Mon Sep 17 00:00:00 2001 From: neverland Date: Mon, 16 Mar 2026 09:39:42 +0800 Subject: [PATCH 4/4] fix --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 1b2132c..e159c08 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ ] }, "dependencies": { - "@rspack/dev-middleware": "2.0.0-beta.1", + "@rspack/dev-middleware": "2.0.0-beta.2", "@types/ws": "^8.18.1", "chokidar": "^5.0.0", "connect-history-api-fallback": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81d54a4..734c02c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@rspack/dev-middleware': - specifier: 2.0.0-beta.1 - version: 2.0.0-beta.1(@rspack/core@2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19)) + specifier: 2.0.0-beta.2 + version: 2.0.0-beta.2(@rspack/core@2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19)) '@types/ws': specifier: ^8.18.1 version: 8.18.1 @@ -478,8 +478,8 @@ packages: '@swc/helpers': optional: true - '@rspack/dev-middleware@2.0.0-beta.1': - resolution: {integrity: sha512-XEr0Aa1u/8Y5PmvQcbfwVfztdPt/CjjV5SdLIM8046hQjmRFMOmkQ9p32OdlUvSFWAdpABsHIsfIcClVh2eaLw==} + '@rspack/dev-middleware@2.0.0-beta.2': + resolution: {integrity: sha512-cbCcloAUYrb65LPd0HLhMKOWKasEM1rGXb4P9aonQcoODC9ThTdzUuZhXEwlGrinBDcMmOzEk9TYfTg9PDUevw==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@rspack/core': ^2.0.0-0 @@ -2157,7 +2157,7 @@ snapshots: '@module-federation/runtime-tools': 2.1.0 '@swc/helpers': 0.5.19 - '@rspack/dev-middleware@2.0.0-beta.1(@rspack/core@2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19))': + '@rspack/dev-middleware@2.0.0-beta.2(@rspack/core@2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19))': optionalDependencies: '@rspack/core': 2.0.0-beta.6(@module-federation/runtime-tools@2.1.0)(@swc/helpers@0.5.19)