From 8efcf95d10da72e8be2249b6d8f7efbe837a8b37 Mon Sep 17 00:00:00 2001 From: LingyuCoder Date: Wed, 12 Mar 2025 18:53:17 +0800 Subject: [PATCH] refactor: remove alis hijacking --- src/alias.ts | 51 --------------------------------------------------- src/server.ts | 25 ++++++++++--------------- 2 files changed, 10 insertions(+), 66 deletions(-) delete mode 100644 src/alias.ts diff --git a/src/alias.ts b/src/alias.ts deleted file mode 100644 index d098a50..0000000 --- a/src/alias.ts +++ /dev/null @@ -1,51 +0,0 @@ -const Module = require("node:module"); -const MODULE_MAP: Record = {}; -const RESOLVER_MAP: Record = {}; - -export const addResolveAlias = ( - name: string, - aliasMap: Record, -) => { - const modulePath = require.resolve(name); - if (modulePath in RESOLVER_MAP) { - throw new Error(`Should not add resolve alias to ${name} again.`); - } - const m = require.cache[modulePath]; - if (!m) { - throw new Error("Failed to resolve webpack-dev-server."); - } - RESOLVER_MAP[modulePath] = m.require.resolve; - // biome-ignore lint/suspicious/noExplicitAny: - m.require.resolve = ((id: string, options?: any) => - aliasMap[id] || - RESOLVER_MAP[modulePath].apply(m.require, [ - id, - options, - ])) as typeof require.resolve; - MODULE_MAP[modulePath] = Module._resolveFilename; - Module._resolveFilename = ( - request: string, - mod: NodeModule, - ...args: unknown[] - ) => { - if (mod.filename === modulePath && aliasMap[request]) { - return aliasMap[request]; - } - return MODULE_MAP[modulePath](request, mod, ...args); - }; -}; - -export const removeResolveAlias = (name: string) => { - const modulePath = require.resolve(name); - if (!(modulePath in RESOLVER_MAP)) { - return; - } - const m = require.cache[modulePath]; - if (!m) { - throw new Error("Failed to resolve webpack-dev-server"); - } - - Module._resolveFilename = MODULE_MAP[modulePath]; - m.require.resolve = RESOLVER_MAP[modulePath]; - delete RESOLVER_MAP[modulePath]; -}; diff --git a/src/server.ts b/src/server.ts index 9c64f33..ec00ccb 100644 --- a/src/server.ts +++ b/src/server.ts @@ -15,7 +15,6 @@ import WebpackDevServer from "webpack-dev-server"; // @ts-ignore 'package.json' is not under 'rootDir' import { version } from "../package.json"; -import { addResolveAlias, removeResolveAlias } from "./alias"; import type { DevServer, ResolvedDevServer } from "./config"; import { applyDevServerPatch } from "./patch"; @@ -102,20 +101,16 @@ export class RspackDevServer extends WebpackDevServer { await super.initialize(); } - // @ts-ignore - private override addAdditionalEntries(compiler: Compiler) { - addResolveAlias("webpack-dev-server", { - "../client/index.js": require.resolve("@rspack/dev-server/client/index"), - "webpack/hot/only-dev-server": require.resolve( - "@rspack/core/hot/only-dev-server", - ), - "webpack/hot/dev-server": require.resolve("@rspack/core/hot/dev-server"), - }); - try { - // @ts-expect-error - super.addAdditionalEntries(compiler); - } finally { - removeResolveAlias("webpack-dev-server"); + getClientEntry(): string { + return require.resolve("@rspack/dev-server/client/index"); + } + + getClientHotEntry(): string | undefined { + if (this.options.hot === "only") { + return require.resolve("@rspack/core/hot/only-dev-server"); + } + if (this.options.hot) { + return require.resolve("@rspack/core/hot/dev-server"); } } }