From 9d3a5dcab50fb0314ade4c23baf8be003d3a676a Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 5 Oct 2025 09:38:31 +0800 Subject: [PATCH 1/5] refactor(helpers): avoid importing helpers via barrel files --- packages/core/src/cli/init.ts | 3 ++- packages/core/src/createRsbuild.ts | 2 +- packages/core/src/defaultConfig.ts | 3 ++- packages/core/src/helpers/index.ts | 6 +----- packages/core/src/loadEnv.ts | 3 ++- packages/core/src/loader/transformLoader.ts | 2 +- packages/core/src/pluginHelper.ts | 2 +- packages/core/src/plugins/appIcon.ts | 4 ++-- packages/core/src/plugins/bundleAnalyzer.ts | 2 +- packages/core/src/plugins/cache.ts | 3 ++- packages/core/src/plugins/cleanOutput.ts | 3 ++- packages/core/src/plugins/fileSize.ts | 3 ++- packages/core/src/plugins/html.ts | 2 +- packages/core/src/plugins/manifest.ts | 2 +- packages/core/src/plugins/server.ts | 3 ++- packages/core/src/provider/createCompiler.ts | 3 +-- packages/core/src/provider/helpers.ts | 3 ++- packages/core/src/provider/initConfigs.ts | 3 ++- packages/core/src/server/assets-middleware/middleware.ts | 2 +- .../src/server/assets-middleware/setupOutputFileSystem.ts | 2 +- packages/core/src/server/browserLogs.ts | 3 ++- packages/core/src/server/devMiddlewares.ts | 8 ++------ packages/core/src/server/devServer.ts | 8 ++------ packages/core/src/server/helper.ts | 2 +- packages/core/src/server/middlewares.ts | 3 ++- packages/core/src/server/overlay.ts | 2 +- packages/core/src/server/prodServer.ts | 2 +- packages/core/src/server/proxy.ts | 2 +- packages/core/src/server/socketServer.ts | 2 +- packages/core/src/server/watchFiles.ts | 3 ++- 30 files changed, 45 insertions(+), 46 deletions(-) diff --git a/packages/core/src/cli/init.ts b/packages/core/src/cli/init.ts index 9fbcf6fa6d..4f84b1754b 100644 --- a/packages/core/src/cli/init.ts +++ b/packages/core/src/cli/init.ts @@ -1,6 +1,7 @@ import path from 'node:path'; import { createRsbuild } from '../createRsbuild'; -import { castArray, ensureAbsolutePath } from '../helpers'; +import { castArray } from '../helpers'; +import { ensureAbsolutePath } from '../helpers/path'; import { loadConfig as baseLoadConfig } from '../loadConfig'; import { logger } from '../logger'; import { watchFilesForRestart } from '../restart'; diff --git a/packages/core/src/createRsbuild.ts b/packages/core/src/createRsbuild.ts index e628c9e361..1d2735ad45 100644 --- a/packages/core/src/createRsbuild.ts +++ b/packages/core/src/createRsbuild.ts @@ -5,11 +5,11 @@ import { castArray, color, getNodeEnv, - isEmptyDir, isFunction, pick, setNodeEnv, } from './helpers'; +import { isEmptyDir } from './helpers/fs'; import { initPluginAPI } from './initPlugins'; import { type LoadEnvResult, loadEnv } from './loadEnv'; import { isDebug, logger } from './logger'; diff --git a/packages/core/src/defaultConfig.ts b/packages/core/src/defaultConfig.ts index a4b78cfe59..dda3a5e956 100644 --- a/packages/core/src/defaultConfig.ts +++ b/packages/core/src/defaultConfig.ts @@ -19,7 +19,8 @@ import { TS_CONFIG_FILE, WASM_DIST_DIR, } from './constants'; -import { findExists, getNodeEnv, isFileExists } from './helpers'; +import { getNodeEnv } from './helpers'; +import { findExists, isFileExists } from './helpers/fs'; import { mergeRsbuildConfig } from './mergeConfig'; import type { NormalizedConfig, diff --git a/packages/core/src/helpers/index.ts b/packages/core/src/helpers/index.ts index 0e35c9e90f..f226011eb6 100644 --- a/packages/core/src/helpers/index.ts +++ b/packages/core/src/helpers/index.ts @@ -12,11 +12,7 @@ import type { } from '../types'; import { color } from './vendors'; -export * from './fs'; -export * from './path'; -export * from './stats'; -export * from './vendors'; -export { RspackChain }; +export { color, RspackChain }; // Lazy compilation was stabilized in Rspack v1.5.0 export const rspackMinVersion = '1.5.0'; diff --git a/packages/core/src/loadEnv.ts b/packages/core/src/loadEnv.ts index 054651af4b..b0f8a96f39 100644 --- a/packages/core/src/loadEnv.ts +++ b/packages/core/src/loadEnv.ts @@ -1,7 +1,8 @@ import fs from 'node:fs'; import { join } from 'node:path'; import { expand } from 'dotenv-expand'; -import { color, getNodeEnv, isFileSync } from './helpers'; +import { color, getNodeEnv } from './helpers'; +import { isFileSync } from './helpers/fs'; import { logger } from './logger'; const DOTENV_LINE = diff --git a/packages/core/src/loader/transformLoader.ts b/packages/core/src/loader/transformLoader.ts index 8ee246025d..e3940f3ba2 100644 --- a/packages/core/src/loader/transformLoader.ts +++ b/packages/core/src/loader/transformLoader.ts @@ -1,5 +1,5 @@ import type { LoaderDefinition, RawSourceMap } from '@rspack/core'; -import { requireCompiledPackage } from '../helpers'; +import { requireCompiledPackage } from '../helpers/vendors'; import type { EnvironmentContext } from '../types'; export type TransformLoaderOptions = { diff --git a/packages/core/src/pluginHelper.ts b/packages/core/src/pluginHelper.ts index 38dd7400b9..7e28c621fc 100644 --- a/packages/core/src/pluginHelper.ts +++ b/packages/core/src/pluginHelper.ts @@ -2,7 +2,7 @@ * This file is used to get/set the global instance for html-plugin and css-extract plugin. */ -import { requireCompiledPackage } from './helpers'; +import { requireCompiledPackage } from './helpers/vendors'; import { rspack } from './rspack'; import type { HtmlRspackPlugin } from './types'; diff --git a/packages/core/src/plugins/appIcon.ts b/packages/core/src/plugins/appIcon.ts index 50ea945f2d..9af45a4ea0 100644 --- a/packages/core/src/plugins/appIcon.ts +++ b/packages/core/src/plugins/appIcon.ts @@ -4,12 +4,12 @@ import { addCompilationError, color, ensureAssetPrefix, - fileExistsByCompilation, getPublicPathFromCompiler, isURL, pick, - requireCompiledPackage, } from '../helpers'; +import { fileExistsByCompilation } from '../helpers/fs'; +import { requireCompiledPackage } from '../helpers/vendors'; import type { AppIconItem, HtmlBasicTag, RsbuildPlugin } from '../types'; type IconExtra = { diff --git a/packages/core/src/plugins/bundleAnalyzer.ts b/packages/core/src/plugins/bundleAnalyzer.ts index 6f746f58d9..dad4bfce5f 100644 --- a/packages/core/src/plugins/bundleAnalyzer.ts +++ b/packages/core/src/plugins/bundleAnalyzer.ts @@ -1,4 +1,4 @@ -import { requireCompiledPackage } from '../helpers'; +import { requireCompiledPackage } from '../helpers/vendors'; import type { NormalizedEnvironmentConfig, RsbuildConfig, diff --git a/packages/core/src/plugins/cache.ts b/packages/core/src/plugins/cache.ts index 1fd337d435..6936fb2fc2 100644 --- a/packages/core/src/plugins/cache.ts +++ b/packages/core/src/plugins/cache.ts @@ -1,6 +1,7 @@ import fs from 'node:fs'; import { isAbsolute, join } from 'node:path'; -import { findExists, hash, isFileExists } from '../helpers'; +import { hash } from '../helpers'; +import { findExists, isFileExists } from '../helpers/fs'; import { logger } from '../logger'; import type { BuildCacheOptions, diff --git a/packages/core/src/plugins/cleanOutput.ts b/packages/core/src/plugins/cleanOutput.ts index c2da30b8a7..15e6ffdaeb 100644 --- a/packages/core/src/plugins/cleanOutput.ts +++ b/packages/core/src/plugins/cleanOutput.ts @@ -1,6 +1,7 @@ import { join, sep } from 'node:path'; import { RSBUILD_OUTPUTS_PATH } from '../constants'; -import { color, emptyDir } from '../helpers'; +import { color } from '../helpers'; +import { emptyDir } from '../helpers/fs'; import { logger } from '../logger'; import type { CleanDistPath, diff --git a/packages/core/src/plugins/fileSize.ts b/packages/core/src/plugins/fileSize.ts index e929eba10f..a0e70ffa94 100644 --- a/packages/core/src/plugins/fileSize.ts +++ b/packages/core/src/plugins/fileSize.ts @@ -7,7 +7,8 @@ import path from 'node:path'; import { promisify } from 'node:util'; import zlib from 'node:zlib'; import { JS_REGEX } from '../constants'; -import { color, getAssetsFromStats } from '../helpers'; +import { color } from '../helpers'; +import { getAssetsFromStats } from '../helpers/stats'; import { logger } from '../logger'; import type { InternalContext, diff --git a/packages/core/src/plugins/html.ts b/packages/core/src/plugins/html.ts index 912c019c44..8dcbfb6799 100644 --- a/packages/core/src/plugins/html.ts +++ b/packages/core/src/plugins/html.ts @@ -9,9 +9,9 @@ import { castArray, color, getPublicPathFromChain, - isFileExists, isPlainObject, } from '../helpers'; +import { isFileExists } from '../helpers/fs'; import { entryNameSymbol, type HtmlExtraData, diff --git a/packages/core/src/plugins/manifest.ts b/packages/core/src/plugins/manifest.ts index 07c837bd1a..2882484452 100644 --- a/packages/core/src/plugins/manifest.ts +++ b/packages/core/src/plugins/manifest.ts @@ -7,8 +7,8 @@ import { ensureAssetPrefix, getPublicPathFromCompiler, isObject, - requireCompiledPackage, } from '../helpers'; +import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import { recursiveChunkEntryNames } from '../rspack-plugins/resource-hints/doesChunkBelongToHtml'; import type { diff --git a/packages/core/src/plugins/server.ts b/packages/core/src/plugins/server.ts index 9302510d0b..6c46ba95e6 100644 --- a/packages/core/src/plugins/server.ts +++ b/packages/core/src/plugins/server.ts @@ -2,7 +2,8 @@ import fs from 'node:fs'; import { isAbsolute, join } from 'node:path'; import { isDeno } from '../constants'; import { normalizePublicDirs } from '../defaultConfig'; -import { color, dedupeNestedPaths } from '../helpers'; +import { color } from '../helpers'; +import { dedupeNestedPaths } from '../helpers/path'; import { open } from '../server/open'; import type { OnAfterStartDevServerFn, RsbuildPlugin } from '../types'; diff --git a/packages/core/src/provider/createCompiler.ts b/packages/core/src/provider/createCompiler.ts index 79e6ddba26..2b09a9a27d 100644 --- a/packages/core/src/provider/createCompiler.ts +++ b/packages/core/src/provider/createCompiler.ts @@ -1,12 +1,11 @@ import { sep } from 'node:path'; import { color, - formatStats, - getRsbuildStats, isSatisfyRspackVersion, prettyTime, rspackMinVersion, } from '../helpers'; +import { formatStats, getRsbuildStats } from '../helpers/stats'; import { registerDevHook } from '../hooks'; import { logger } from '../logger'; import { rspack } from '../rspack'; diff --git a/packages/core/src/provider/helpers.ts b/packages/core/src/provider/helpers.ts index b5b25409e1..357d3765d6 100644 --- a/packages/core/src/provider/helpers.ts +++ b/packages/core/src/provider/helpers.ts @@ -3,7 +3,8 @@ */ export { modifyBundlerChain } from '../configChain'; -export { formatStats, getRsbuildStats, prettyTime } from '../helpers'; +export { prettyTime } from '../helpers'; +export { formatStats, getRsbuildStats } from '../helpers/stats'; export { registerBuildHook, registerDevHook } from '../hooks'; export { inspectConfig } from '../inspectConfig'; export { diff --git a/packages/core/src/provider/initConfigs.ts b/packages/core/src/provider/initConfigs.ts index 7cbddd99f4..3e3bd7977d 100644 --- a/packages/core/src/provider/initConfigs.ts +++ b/packages/core/src/provider/initConfigs.ts @@ -4,7 +4,8 @@ import { updateEnvironmentContext, } from '../createContext'; import { getDefaultEntry, normalizeConfig } from '../defaultConfig'; -import { camelCase, color, ensureAbsolutePath, pick } from '../helpers'; +import { camelCase, color, pick } from '../helpers'; +import { ensureAbsolutePath } from '../helpers/path'; import { inspectConfig } from '../inspectConfig'; import { isDebug, logger } from '../logger'; import { mergeRsbuildConfig } from '../mergeConfig'; diff --git a/packages/core/src/server/assets-middleware/middleware.ts b/packages/core/src/server/assets-middleware/middleware.ts index bee6380f27..4e5612aeb2 100644 --- a/packages/core/src/server/assets-middleware/middleware.ts +++ b/packages/core/src/server/assets-middleware/middleware.ts @@ -2,7 +2,7 @@ import type { Stats as FSStats, ReadStream } from 'node:fs'; import onFinished from 'on-finished'; import type { Range, Result as RangeResult, Ranges } from 'range-parser'; import rangeParser from 'range-parser'; -import { requireCompiledPackage } from '../../helpers'; +import { requireCompiledPackage } from '../../helpers/vendors'; import { logger } from '../../logger'; import type { InternalContext, RequestHandler } from '../../types'; import { escapeHtml } from './escapeHtml'; diff --git a/packages/core/src/server/assets-middleware/setupOutputFileSystem.ts b/packages/core/src/server/assets-middleware/setupOutputFileSystem.ts index a05bd85eb6..71ae238334 100644 --- a/packages/core/src/server/assets-middleware/setupOutputFileSystem.ts +++ b/packages/core/src/server/assets-middleware/setupOutputFileSystem.ts @@ -2,7 +2,7 @@ import type { Compiler, OutputFileSystem as RspackOutputFileSystem, } from '@rspack/core'; -import { requireCompiledPackage } from '../../helpers'; +import { requireCompiledPackage } from '../../helpers/vendors'; import type { OutputFileSystem } from './index'; import type { ResolvedWriteToDisk } from './setupWriteToDisk'; diff --git a/packages/core/src/server/browserLogs.ts b/packages/core/src/server/browserLogs.ts index bf695b128a..8091c5ada6 100644 --- a/packages/core/src/server/browserLogs.ts +++ b/packages/core/src/server/browserLogs.ts @@ -2,7 +2,8 @@ import path from 'node:path'; import { promisify } from 'node:util'; import { parse as parseStack, type StackFrame } from 'stacktrace-parser'; import { SCRIPT_REGEX } from '../constants'; -import { color, requireCompiledPackage } from '../helpers'; +import { color } from '../helpers'; +import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import type { EnvironmentContext, InternalContext, Rspack } from '../types'; import { getFileFromUrl } from './assets-middleware/getFileFromUrl'; diff --git a/packages/core/src/server/devMiddlewares.ts b/packages/core/src/server/devMiddlewares.ts index d289176e18..6f335ab030 100644 --- a/packages/core/src/server/devMiddlewares.ts +++ b/packages/core/src/server/devMiddlewares.ts @@ -1,11 +1,7 @@ import { isAbsolute, join } from 'node:path'; import { normalizePublicDirs } from '../defaultConfig'; -import { - castArray, - isMultiCompiler, - pick, - requireCompiledPackage, -} from '../helpers'; +import { castArray, isMultiCompiler, pick } from '../helpers'; +import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import { rspack } from '../rspack'; import type { diff --git a/packages/core/src/server/devServer.ts b/packages/core/src/server/devServer.ts index f0fee1b37e..676409d18c 100644 --- a/packages/core/src/server/devServer.ts +++ b/packages/core/src/server/devServer.ts @@ -1,11 +1,7 @@ import type { Server } from 'node:http'; import type { Http2SecureServer } from 'node:http2'; -import { - color, - getPublicPathFromCompiler, - isMultiCompiler, - requireCompiledPackage, -} from '../helpers'; +import { color, getPublicPathFromCompiler, isMultiCompiler } from '../helpers'; +import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import { onBeforeRestartServer, restartDevServer } from '../restart'; import type { diff --git a/packages/core/src/server/helper.ts b/packages/core/src/server/helper.ts index 1af87a5c5e..dcf42e1043 100644 --- a/packages/core/src/server/helper.ts +++ b/packages/core/src/server/helper.ts @@ -7,10 +7,10 @@ import { DEFAULT_DEV_HOST } from '../constants'; import { addTrailingSlash, color, - getCommonParentPath, isFunction, removeLeadingSlash, } from '../helpers'; +import { getCommonParentPath } from '../helpers/path'; import { logger } from '../logger'; import type { InternalContext, diff --git a/packages/core/src/server/middlewares.ts b/packages/core/src/server/middlewares.ts index 143a3eaac2..0d1e177baa 100644 --- a/packages/core/src/server/middlewares.ts +++ b/packages/core/src/server/middlewares.ts @@ -1,7 +1,8 @@ import type { IncomingMessage } from 'node:http'; import path from 'node:path'; import onFinished from 'on-finished'; -import { addTrailingSlash, color, getAssetsFromStats } from '../helpers'; +import { addTrailingSlash, color } from '../helpers'; +import { getAssetsFromStats } from '../helpers/stats'; import { logger } from '../logger'; import type { Connect, diff --git a/packages/core/src/server/overlay.ts b/packages/core/src/server/overlay.ts index ae0389bac2..0761a80449 100644 --- a/packages/core/src/server/overlay.ts +++ b/packages/core/src/server/overlay.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import { toRelativePath } from '../helpers'; +import { toRelativePath } from '../helpers/path'; import { ansiHTML } from './ansiHTML'; import { escapeHtml } from './helper'; diff --git a/packages/core/src/server/prodServer.ts b/packages/core/src/server/prodServer.ts index f33ace859c..5b96723c0a 100644 --- a/packages/core/src/server/prodServer.ts +++ b/packages/core/src/server/prodServer.ts @@ -1,7 +1,7 @@ import type { Server } from 'node:http'; import type { Http2SecureServer } from 'node:http2'; -import { requireCompiledPackage } from '../helpers'; import { getPathnameFromUrl } from '../helpers/path'; +import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import type { Connect, diff --git a/packages/core/src/server/proxy.ts b/packages/core/src/server/proxy.ts index b4246fb635..a18f951e2b 100644 --- a/packages/core/src/server/proxy.ts +++ b/packages/core/src/server/proxy.ts @@ -1,5 +1,5 @@ import type { RequestHandler } from '../../compiled/http-proxy-middleware/index.js'; -import { requireCompiledPackage } from '../helpers/index.js'; +import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import type { RequestHandler as Middleware, diff --git a/packages/core/src/server/socketServer.ts b/packages/core/src/server/socketServer.ts index 4f3b07a7ea..9780bd1419 100644 --- a/packages/core/src/server/socketServer.ts +++ b/packages/core/src/server/socketServer.ts @@ -2,8 +2,8 @@ import type { IncomingMessage } from 'node:http'; import type { Socket } from 'node:net'; import type Ws from '../../compiled/ws/index.js'; import { formatStatsError } from '../helpers/format'; -import { requireCompiledPackage } from '../helpers/index.js'; import { getStatsErrors, getStatsWarnings } from '../helpers/stats'; +import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import type { DevConfig, diff --git a/packages/core/src/server/watchFiles.ts b/packages/core/src/server/watchFiles.ts index de3ca42ecf..1fd96076e7 100644 --- a/packages/core/src/server/watchFiles.ts +++ b/packages/core/src/server/watchFiles.ts @@ -1,6 +1,7 @@ import type { FSWatcher } from '../../compiled/chokidar/index.js'; import { normalizePublicDirs } from '../defaultConfig'; -import { castArray, requireCompiledPackage } from '../helpers'; +import { castArray } from '../helpers'; +import { requireCompiledPackage } from '../helpers/vendors'; import type { ChokidarOptions, DevConfig, From c16ea4a621ab33a82d590fc2d6997ef95a64530a Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 5 Oct 2025 09:57:42 +0800 Subject: [PATCH 2/5] fix --- packages/core/src/helpers/index.ts | 43 -------------------- packages/core/src/helpers/version.ts | 42 +++++++++++++++++++ packages/core/src/provider/createCompiler.ts | 8 +--- 3 files changed, 44 insertions(+), 49 deletions(-) create mode 100644 packages/core/src/helpers/version.ts diff --git a/packages/core/src/helpers/index.ts b/packages/core/src/helpers/index.ts index f226011eb6..df7c3c881e 100644 --- a/packages/core/src/helpers/index.ts +++ b/packages/core/src/helpers/index.ts @@ -14,9 +14,6 @@ import { color } from './vendors'; export { color, RspackChain }; -// Lazy compilation was stabilized in Rspack v1.5.0 -export const rspackMinVersion = '1.5.0'; - export const getNodeEnv = (): string => process.env.NODE_ENV || ''; export const setNodeEnv = (env: string): void => { process.env.NODE_ENV = env; @@ -55,46 +52,6 @@ export const cloneDeep = (value: T): T => { }); }; -const compareSemver = (version1: string, version2: string) => { - const parts1 = version1.split('.').map(Number); - const parts2 = version2.split('.').map(Number); - const len = Math.max(parts1.length, parts2.length); - - for (let i = 0; i < len; i++) { - const item1 = parts1[i] ?? 0; - const item2 = parts2[i] ?? 0; - if (item1 > item2) { - return 1; - } - if (item1 < item2) { - return -1; - } - } - - return 0; -}; - -/** - * If the application overrides the Rspack version to a lower one, - * we should check that the Rspack version is greater than the minimum - * supported version. - */ -export const isSatisfyRspackVersion = (originalVersion: string): boolean => { - let version = originalVersion; - - // The nightly version of Rspack is to append `-canary-abc` to the current version - if (version.includes('-canary')) { - version = version.split('-canary')[0]; - } - - if (version && /^[\d.]+$/.test(version)) { - return compareSemver(version, rspackMinVersion) >= 0; - } - - // ignore other unstable versions - return true; -}; - export const removeLeadingSlash = (s: string): string => s.replace(/^\/+/, ''); export const removeTailingSlash = (s: string): string => s.replace(/\/+$/, ''); export const addTrailingSlash = (s: string): string => diff --git a/packages/core/src/helpers/version.ts b/packages/core/src/helpers/version.ts new file mode 100644 index 0000000000..3e021610d8 --- /dev/null +++ b/packages/core/src/helpers/version.ts @@ -0,0 +1,42 @@ +// Lazy compilation was stabilized in Rspack v1.5.0 +export const rspackMinVersion = '1.5.0'; + +const compareSemver = (version1: string, version2: string) => { + const parts1 = version1.split('.').map(Number); + const parts2 = version2.split('.').map(Number); + const len = Math.max(parts1.length, parts2.length); + + for (let i = 0; i < len; i++) { + const item1 = parts1[i] ?? 0; + const item2 = parts2[i] ?? 0; + if (item1 > item2) { + return 1; + } + if (item1 < item2) { + return -1; + } + } + + return 0; +}; + +/** + * If the application overrides the Rspack version to a lower one, + * we should check that the Rspack version is greater than the minimum + * supported version. + */ +export const isSatisfyRspackVersion = (originalVersion: string): boolean => { + let version = originalVersion; + + // The nightly version of Rspack is to append `-canary-abc` to the current version + if (version.includes('-canary')) { + version = version.split('-canary')[0]; + } + + if (version && /^[\d.]+$/.test(version)) { + return compareSemver(version, rspackMinVersion) >= 0; + } + + // ignore other unstable versions + return true; +}; diff --git a/packages/core/src/provider/createCompiler.ts b/packages/core/src/provider/createCompiler.ts index 2b09a9a27d..4bee2b1552 100644 --- a/packages/core/src/provider/createCompiler.ts +++ b/packages/core/src/provider/createCompiler.ts @@ -1,11 +1,7 @@ import { sep } from 'node:path'; -import { - color, - isSatisfyRspackVersion, - prettyTime, - rspackMinVersion, -} from '../helpers'; +import { color, prettyTime } from '../helpers'; import { formatStats, getRsbuildStats } from '../helpers/stats'; +import { isSatisfyRspackVersion, rspackMinVersion } from '../helpers/version'; import { registerDevHook } from '../hooks'; import { logger } from '../logger'; import { rspack } from '../rspack'; From ecec4d4179f73b03f93d3e4fdbf426cb00d472e8 Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 5 Oct 2025 17:21:14 +0800 Subject: [PATCH 3/5] fix --- packages/core/src/helpers/compiler.ts | 36 +++++ packages/core/src/helpers/index.ts | 127 ------------------ packages/core/src/helpers/stats.ts | 2 +- packages/core/src/helpers/url.ts | 95 +++++++++++++ packages/core/src/hooks.ts | 3 +- packages/core/src/index.ts | 2 +- packages/core/src/initPlugins.ts | 3 +- packages/core/src/plugins/appIcon.ts | 11 +- packages/core/src/plugins/define.ts | 3 +- packages/core/src/plugins/html.ts | 8 +- packages/core/src/plugins/inlineChunk.ts | 9 +- packages/core/src/plugins/manifest.ts | 9 +- packages/core/src/plugins/nonce.ts | 3 +- packages/core/src/plugins/output.ts | 3 +- .../src/rspack-plugins/RsbuildHtmlPlugin.ts | 10 +- .../resource-hints/HtmlResourceHintsPlugin.ts | 8 +- .../src/server/assets-middleware/index.ts | 3 +- packages/core/src/server/buildManager.ts | 2 +- packages/core/src/server/devMiddlewares.ts | 3 +- packages/core/src/server/devServer.ts | 6 +- packages/core/src/server/helper.ts | 8 +- packages/core/src/server/middlewares.ts | 3 +- packages/core/src/server/open.ts | 3 +- 23 files changed, 174 insertions(+), 186 deletions(-) create mode 100644 packages/core/src/helpers/compiler.ts create mode 100644 packages/core/src/helpers/url.ts diff --git a/packages/core/src/helpers/compiler.ts b/packages/core/src/helpers/compiler.ts new file mode 100644 index 0000000000..4cbd9d48af --- /dev/null +++ b/packages/core/src/helpers/compiler.ts @@ -0,0 +1,36 @@ +import { DEFAULT_ASSET_PREFIX } from '../constants'; +import type { Rspack } from '../types'; + +export const isMultiCompiler = ( + compiler: Rspack.Compiler | Rspack.MultiCompiler, +): compiler is Rspack.MultiCompiler => { + return 'compilers' in compiler && Array.isArray(compiler.compilers); +}; + +export const getPublicPathFromCompiler = ( + compiler: Rspack.Compiler | Rspack.Compilation, +): string => { + const { publicPath } = compiler.options.output; + + if (typeof publicPath === 'string') { + // 'auto' is a magic value in Rspack and behave like `publicPath: ""` + if (publicPath === 'auto') { + return ''; + } + return publicPath.endsWith('/') ? publicPath : `${publicPath}/`; + } + + // publicPath function is not supported yet, fallback to default value + return DEFAULT_ASSET_PREFIX; +}; + +export const applyToCompiler = ( + compiler: Rspack.Compiler | Rspack.MultiCompiler, + apply: (c: Rspack.Compiler, index: number) => void, +): void => { + if (isMultiCompiler(compiler)) { + compiler.compilers.forEach(apply); + } else { + apply(compiler, 0); + } +}; diff --git a/packages/core/src/helpers/index.ts b/packages/core/src/helpers/index.ts index df7c3c881e..253c997c2b 100644 --- a/packages/core/src/helpers/index.ts +++ b/packages/core/src/helpers/index.ts @@ -1,8 +1,5 @@ -import { posix } from 'node:path'; -import { URL } from 'node:url'; import deepmerge from 'deepmerge'; import RspackChain from '../../compiled/rspack-chain'; -import { DEFAULT_ASSET_PREFIX } from '../constants'; import type { FilenameConfig, NormalizedConfig, @@ -52,109 +49,6 @@ export const cloneDeep = (value: T): T => { }); }; -export const removeLeadingSlash = (s: string): string => s.replace(/^\/+/, ''); -export const removeTailingSlash = (s: string): string => s.replace(/\/+$/, ''); -export const addTrailingSlash = (s: string): string => - s.endsWith('/') ? s : `${s}/`; - -export const formatPublicPath = ( - publicPath: string, - withSlash = true, -): string => { - // 'auto' is a magic value in Rspack and we should not add trailing slash - if (publicPath === 'auto') { - return publicPath; - } - - return withSlash - ? addTrailingSlash(publicPath) - : removeTailingSlash(publicPath); -}; - -export const getPublicPathFromChain = ( - chain: RspackChain, - withSlash = true, -): string => { - const publicPath: Rspack.PublicPath = chain.output.get('publicPath'); - - if (typeof publicPath === 'string') { - return formatPublicPath(publicPath, withSlash); - } - - return formatPublicPath(DEFAULT_ASSET_PREFIX, withSlash); -}; - -export const getPublicPathFromCompiler = ( - compiler: Rspack.Compiler | Rspack.Compilation, -): string => { - const { publicPath } = compiler.options.output; - - if (typeof publicPath === 'string') { - // 'auto' is a magic value in Rspack and behave like `publicPath: ""` - if (publicPath === 'auto') { - return ''; - } - return publicPath.endsWith('/') ? publicPath : `${publicPath}/`; - } - - // publicPath function is not supported yet, fallback to default value - return DEFAULT_ASSET_PREFIX; -}; - -export const urlJoin = (base: string, path: string) => { - const [urlProtocol, baseUrl] = base.split('://'); - return `${urlProtocol}://${posix.join(baseUrl, path)}`; -}; - -// Can be replaced with URL.canParse when we drop support for Node.js 18 -export const canParse = (url: string): boolean => { - try { - new URL(url); - return true; - } catch { - return false; - } -}; - -export const ensureAssetPrefix = ( - url: string, - assetPrefix: Rspack.PublicPath = DEFAULT_ASSET_PREFIX, -): string => { - // The use of an absolute URL without a protocol is technically legal, - // however it cannot be parsed as a URL instance, just return it. - // e.g. str is //example.com/foo.js - if (url.startsWith('//')) { - return url; - } - - // If str is an complete URL, just return it. - // Only absolute url with hostname & protocol can be parsed into URL instance. - // e.g. str is https://example.com/foo.js - if (canParse(url)) { - return url; - } - - // 'auto' is a magic value in Rspack and behave like `publicPath: ""` - if (assetPrefix === 'auto') { - return url; - } - - // function is not supported by this helper - if (typeof assetPrefix === 'function') { - return url; - } - - if (assetPrefix.startsWith('http')) { - return urlJoin(assetPrefix, url); - } - - if (assetPrefix.startsWith('//')) { - return urlJoin(`https:${assetPrefix}`, url).replace('https:', ''); - } - - return posix.join(assetPrefix, url); -}; - export function getFilename( config: NormalizedConfig | NormalizedEnvironmentConfig, type: 'js', @@ -252,24 +146,9 @@ export function partition( return [truthy, falsy]; } -export const applyToCompiler = ( - compiler: Rspack.Compiler | Rspack.MultiCompiler, - apply: (c: Rspack.Compiler, index: number) => void, -): void => { - if (isMultiCompiler(compiler)) { - compiler.compilers.forEach(apply); - } else { - apply(compiler, 0); - } -}; - export const upperFirst = (str: string): string => str ? str.charAt(0).toUpperCase() + str.slice(1) : ''; -// Determine if the string is a URL -export const isURL = (str: string): boolean => - str.startsWith('http') || str.startsWith('//:'); - export const createVirtualModule = (content: string) => `data:text/javascript,${content}`; @@ -278,12 +157,6 @@ export function isWebTarget(target: RsbuildTarget | RsbuildTarget[]): boolean { return targets.includes('web') || targets.includes('web-worker'); } -export const isMultiCompiler = ( - compiler: Rspack.Compiler | Rspack.MultiCompiler, -): compiler is Rspack.MultiCompiler => { - return 'compilers' in compiler && Array.isArray(compiler.compilers); -}; - export function pick( obj: T, keys: readonly U[], diff --git a/packages/core/src/helpers/stats.ts b/packages/core/src/helpers/stats.ts index ca3c4bfdb5..defbe9d2ce 100644 --- a/packages/core/src/helpers/stats.ts +++ b/packages/core/src/helpers/stats.ts @@ -1,6 +1,6 @@ import { logger } from '../logger'; import type { ActionType, RsbuildStats, Rspack } from '../types'; -import { isMultiCompiler } from './'; +import { isMultiCompiler } from './compiler'; import { formatStatsError } from './format'; import { color } from './vendors'; diff --git a/packages/core/src/helpers/url.ts b/packages/core/src/helpers/url.ts new file mode 100644 index 0000000000..053a993ffa --- /dev/null +++ b/packages/core/src/helpers/url.ts @@ -0,0 +1,95 @@ +import { posix } from 'node:path'; +import { URL } from 'node:url'; +import type RspackChain from '../../compiled/rspack-chain'; +import { DEFAULT_ASSET_PREFIX } from '../constants'; +import type { Rspack } from '../types'; + +export const removeLeadingSlash = (s: string): string => s.replace(/^\/+/, ''); +export const removeTailingSlash = (s: string): string => s.replace(/\/+$/, ''); +export const addTrailingSlash = (s: string): string => + s.endsWith('/') ? s : `${s}/`; + +// Determine if the string is a URL +export const isURL = (str: string): boolean => + str.startsWith('http') || str.startsWith('//:'); + +export const urlJoin = (base: string, path: string) => { + const [urlProtocol, baseUrl] = base.split('://'); + return `${urlProtocol}://${posix.join(baseUrl, path)}`; +}; + +// Can be replaced with URL.canParse when we drop support for Node.js 18 +export const canParse = (url: string): boolean => { + try { + new URL(url); + return true; + } catch { + return false; + } +}; + +export const ensureAssetPrefix = ( + url: string, + assetPrefix: Rspack.PublicPath = DEFAULT_ASSET_PREFIX, +): string => { + // The use of an absolute URL without a protocol is technically legal, + // however it cannot be parsed as a URL instance, just return it. + // e.g. str is //example.com/foo.js + if (url.startsWith('//')) { + return url; + } + + // If str is an complete URL, just return it. + // Only absolute url with hostname & protocol can be parsed into URL instance. + // e.g. str is https://example.com/foo.js + if (canParse(url)) { + return url; + } + + // 'auto' is a magic value in Rspack and behave like `publicPath: ""` + if (assetPrefix === 'auto') { + return url; + } + + // function is not supported by this helper + if (typeof assetPrefix === 'function') { + return url; + } + + if (assetPrefix.startsWith('http')) { + return urlJoin(assetPrefix, url); + } + + if (assetPrefix.startsWith('//')) { + return urlJoin(`https:${assetPrefix}`, url).replace('https:', ''); + } + + return posix.join(assetPrefix, url); +}; + +export const formatPublicPath = ( + publicPath: string, + withSlash = true, +): string => { + // 'auto' is a magic value in Rspack and we should not add trailing slash + if (publicPath === 'auto') { + return publicPath; + } + + return withSlash + ? addTrailingSlash(publicPath) + : removeTailingSlash(publicPath); +}; + +export const getPublicPathFromChain = ( + chain: RspackChain, + withSlash = true, +): string => { + const publicPath: Rspack.PublicPath = chain.output.get('publicPath'); + + if (typeof publicPath === 'string') { + return formatPublicPath(publicPath, withSlash); + } + + return formatPublicPath(DEFAULT_ASSET_PREFIX, withSlash); +}; diff --git a/packages/core/src/hooks.ts b/packages/core/src/hooks.ts index cff4152c09..a68189845c 100644 --- a/packages/core/src/hooks.ts +++ b/packages/core/src/hooks.ts @@ -1,4 +1,5 @@ -import { isFunction, isMultiCompiler } from './helpers'; +import { isFunction } from './helpers'; +import { isMultiCompiler } from './helpers/compiler'; import type { AsyncHook, EnvironmentAsyncHook, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 0a7c9d50b6..939fbd524e 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -29,7 +29,7 @@ export type { ChainIdentifier } from './configChain'; // Constants export { PLUGIN_CSS_NAME, PLUGIN_SWC_NAME } from './constants'; export { defaultAllowedOrigins } from './defaultConfig'; -export { ensureAssetPrefix } from './helpers'; +export { ensureAssetPrefix } from './helpers/url'; // Helpers export { type Logger, logger } from './logger'; export { mergeRsbuildConfig } from './mergeConfig'; diff --git a/packages/core/src/initPlugins.ts b/packages/core/src/initPlugins.ts index 6ae2fd4fca..07ce4d2a24 100644 --- a/packages/core/src/initPlugins.ts +++ b/packages/core/src/initPlugins.ts @@ -2,8 +2,9 @@ import { join, posix } from 'node:path'; import type { Compiler } from '@rspack/core'; import { LOADER_PATH } from './constants'; import { createPublicContext } from './createContext'; -import { color, getFilename, removeLeadingSlash } from './helpers'; +import { color, getFilename } from './helpers'; import { exitHook } from './helpers/exitHook'; +import { removeLeadingSlash } from './helpers/url'; import type { TransformLoaderOptions } from './loader/transformLoader'; import { logger } from './logger'; import { isEnvironmentMatch } from './pluginManager'; diff --git a/packages/core/src/plugins/appIcon.ts b/packages/core/src/plugins/appIcon.ts index 9af45a4ea0..b555fa8244 100644 --- a/packages/core/src/plugins/appIcon.ts +++ b/packages/core/src/plugins/appIcon.ts @@ -1,14 +1,9 @@ import path from 'node:path'; import { promisify } from 'node:util'; -import { - addCompilationError, - color, - ensureAssetPrefix, - getPublicPathFromCompiler, - isURL, - pick, -} from '../helpers'; +import { addCompilationError, color, pick } from '../helpers'; +import { getPublicPathFromCompiler } from '../helpers/compiler'; import { fileExistsByCompilation } from '../helpers/fs'; +import { ensureAssetPrefix, isURL } from '../helpers/url'; import { requireCompiledPackage } from '../helpers/vendors'; import type { AppIconItem, HtmlBasicTag, RsbuildPlugin } from '../types'; diff --git a/packages/core/src/plugins/define.ts b/packages/core/src/plugins/define.ts index 3bccf504e3..85d40c0324 100644 --- a/packages/core/src/plugins/define.ts +++ b/packages/core/src/plugins/define.ts @@ -1,4 +1,5 @@ -import { color, getPublicPathFromChain } from '../helpers'; +import { color } from '../helpers'; +import { getPublicPathFromChain } from '../helpers/url'; import { logger } from '../logger'; import type { Define, RsbuildPlugin } from '../types'; diff --git a/packages/core/src/plugins/html.ts b/packages/core/src/plugins/html.ts index 8dcbfb6799..234f84a462 100644 --- a/packages/core/src/plugins/html.ts +++ b/packages/core/src/plugins/html.ts @@ -5,13 +5,9 @@ import { reduceConfigsMergeContext, reduceConfigsWithContext, } from 'reduce-configs'; -import { - castArray, - color, - getPublicPathFromChain, - isPlainObject, -} from '../helpers'; +import { castArray, color, isPlainObject } from '../helpers'; import { isFileExists } from '../helpers/fs'; +import { getPublicPathFromChain } from '../helpers/url'; import { entryNameSymbol, type HtmlExtraData, diff --git a/packages/core/src/plugins/inlineChunk.ts b/packages/core/src/plugins/inlineChunk.ts index 5d17bdd800..a96905d78e 100644 --- a/packages/core/src/plugins/inlineChunk.ts +++ b/packages/core/src/plugins/inlineChunk.ts @@ -1,11 +1,8 @@ import { isRegExp } from 'node:util/types'; import { CSS_REGEX, JS_REGEX } from '../constants'; -import { - addTrailingSlash, - ensureAssetPrefix, - getPublicPathFromCompiler, - isFunction, -} from '../helpers'; +import { isFunction } from '../helpers'; +import { getPublicPathFromCompiler } from '../helpers/compiler'; +import { addTrailingSlash, ensureAssetPrefix } from '../helpers/url'; import type { HtmlBasicTag, InlineChunkTest, diff --git a/packages/core/src/plugins/manifest.ts b/packages/core/src/plugins/manifest.ts index 2882484452..f3a3020bb8 100644 --- a/packages/core/src/plugins/manifest.ts +++ b/packages/core/src/plugins/manifest.ts @@ -2,12 +2,9 @@ import type { FileDescriptor, InternalOptions, } from '../../compiled/rspack-manifest-plugin'; -import { - color, - ensureAssetPrefix, - getPublicPathFromCompiler, - isObject, -} from '../helpers'; +import { color, isObject } from '../helpers'; +import { getPublicPathFromCompiler } from '../helpers/compiler'; +import { ensureAssetPrefix } from '../helpers/url'; import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import { recursiveChunkEntryNames } from '../rspack-plugins/resource-hints/doesChunkBelongToHtml'; diff --git a/packages/core/src/plugins/nonce.ts b/packages/core/src/plugins/nonce.ts index e12ff8b430..f017bb3901 100644 --- a/packages/core/src/plugins/nonce.ts +++ b/packages/core/src/plugins/nonce.ts @@ -1,4 +1,5 @@ -import { applyToCompiler, createVirtualModule } from '../helpers'; +import { createVirtualModule } from '../helpers'; +import { applyToCompiler } from '../helpers/compiler'; import type { RsbuildPlugin } from '../types'; export const pluginNonce = (): RsbuildPlugin => ({ diff --git a/packages/core/src/plugins/output.ts b/packages/core/src/plugins/output.ts index 4fa703b935..ee05819b74 100644 --- a/packages/core/src/plugins/output.ts +++ b/packages/core/src/plugins/output.ts @@ -4,7 +4,8 @@ import { DEFAULT_DEV_HOST, DEFAULT_PORT, } from '../constants'; -import { formatPublicPath, getFilename, urlJoin } from '../helpers'; +import { getFilename } from '../helpers'; +import { formatPublicPath, urlJoin } from '../helpers/url'; import { replacePortPlaceholder } from '../server/open'; import type { NormalizedEnvironmentConfig, diff --git a/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts b/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts index 0a114ebf59..60605e0ee5 100644 --- a/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts +++ b/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts @@ -1,14 +1,8 @@ import path from 'node:path'; import { promisify } from 'node:util'; import type { Compilation, Compiler } from '@rspack/core'; -import { - addCompilationError, - color, - ensureAssetPrefix, - isFunction, - isURL, - partition, -} from '../helpers'; +import { addCompilationError, color, isFunction, partition } from '../helpers'; +import { ensureAssetPrefix, isURL } from '../helpers/url'; import { logger } from '../logger'; import { getHTMLPlugin } from '../pluginHelper'; import type { diff --git a/packages/core/src/rspack-plugins/resource-hints/HtmlResourceHintsPlugin.ts b/packages/core/src/rspack-plugins/resource-hints/HtmlResourceHintsPlugin.ts index 7b701f8a39..352be9796e 100644 --- a/packages/core/src/rspack-plugins/resource-hints/HtmlResourceHintsPlugin.ts +++ b/packages/core/src/rspack-plugins/resource-hints/HtmlResourceHintsPlugin.ts @@ -22,12 +22,8 @@ import type { Compiler, RspackPluginInstance, } from '@rspack/core'; -import { - castArray, - ensureAssetPrefix, - isFunction, - upperFirst, -} from '../../helpers'; +import { castArray, isFunction, upperFirst } from '../../helpers'; +import { ensureAssetPrefix } from '../../helpers/url'; import { getHTMLPlugin } from '../../pluginHelper'; import type { HtmlRspackPlugin, diff --git a/packages/core/src/server/assets-middleware/index.ts b/packages/core/src/server/assets-middleware/index.ts index 8cbe800de3..c635f107df 100644 --- a/packages/core/src/server/assets-middleware/index.ts +++ b/packages/core/src/server/assets-middleware/index.ts @@ -9,7 +9,8 @@ import type { ReadStream } from 'node:fs'; import { createRequire } from 'node:module'; import type { Compiler, MultiCompiler, Watching } from '@rspack/core'; -import { applyToCompiler, isMultiCompiler, pick } from '../../helpers'; +import { pick } from '../../helpers'; +import { applyToCompiler, isMultiCompiler } from '../../helpers/compiler'; import { logger } from '../../logger'; import type { InternalContext, diff --git a/packages/core/src/server/buildManager.ts b/packages/core/src/server/buildManager.ts index 9005795a42..399e4ef0c3 100644 --- a/packages/core/src/server/buildManager.ts +++ b/packages/core/src/server/buildManager.ts @@ -1,5 +1,5 @@ import fs from 'node:fs'; -import { isMultiCompiler } from '../helpers'; +import { isMultiCompiler } from '../helpers/compiler'; import { getPathnameFromUrl } from '../helpers/path'; import type { InternalContext, NormalizedConfig, Rspack } from '../types'; import { type AssetsMiddleware, assetsMiddleware } from './assets-middleware'; diff --git a/packages/core/src/server/devMiddlewares.ts b/packages/core/src/server/devMiddlewares.ts index 6f335ab030..8e7204aea2 100644 --- a/packages/core/src/server/devMiddlewares.ts +++ b/packages/core/src/server/devMiddlewares.ts @@ -1,6 +1,7 @@ import { isAbsolute, join } from 'node:path'; import { normalizePublicDirs } from '../defaultConfig'; -import { castArray, isMultiCompiler, pick } from '../helpers'; +import { castArray, pick } from '../helpers'; +import { isMultiCompiler } from '../helpers/compiler'; import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import { rspack } from '../rspack'; diff --git a/packages/core/src/server/devServer.ts b/packages/core/src/server/devServer.ts index 676409d18c..c40288a126 100644 --- a/packages/core/src/server/devServer.ts +++ b/packages/core/src/server/devServer.ts @@ -1,6 +1,10 @@ import type { Server } from 'node:http'; import type { Http2SecureServer } from 'node:http2'; -import { color, getPublicPathFromCompiler, isMultiCompiler } from '../helpers'; +import { color } from '../helpers'; +import { + getPublicPathFromCompiler, + isMultiCompiler, +} from '../helpers/compiler'; import { requireCompiledPackage } from '../helpers/vendors'; import { logger } from '../logger'; import { onBeforeRestartServer, restartDevServer } from '../restart'; diff --git a/packages/core/src/server/helper.ts b/packages/core/src/server/helper.ts index dcf42e1043..ceaa4f6e61 100644 --- a/packages/core/src/server/helper.ts +++ b/packages/core/src/server/helper.ts @@ -4,13 +4,9 @@ import type { Socket } from 'node:net'; import os from 'node:os'; import { posix, relative, sep } from 'node:path'; import { DEFAULT_DEV_HOST } from '../constants'; -import { - addTrailingSlash, - color, - isFunction, - removeLeadingSlash, -} from '../helpers'; +import { color, isFunction } from '../helpers'; import { getCommonParentPath } from '../helpers/path'; +import { addTrailingSlash, removeLeadingSlash } from '../helpers/url'; import { logger } from '../logger'; import type { InternalContext, diff --git a/packages/core/src/server/middlewares.ts b/packages/core/src/server/middlewares.ts index 0d1e177baa..c5e567142e 100644 --- a/packages/core/src/server/middlewares.ts +++ b/packages/core/src/server/middlewares.ts @@ -1,8 +1,9 @@ import type { IncomingMessage } from 'node:http'; import path from 'node:path'; import onFinished from 'on-finished'; -import { addTrailingSlash, color } from '../helpers'; +import { color } from '../helpers'; import { getAssetsFromStats } from '../helpers/stats'; +import { addTrailingSlash } from '../helpers/url'; import { logger } from '../logger'; import type { Connect, diff --git a/packages/core/src/server/open.ts b/packages/core/src/server/open.ts index 66ece143aa..3d4f820d16 100644 --- a/packages/core/src/server/open.ts +++ b/packages/core/src/server/open.ts @@ -1,6 +1,7 @@ import { apps, default as baseOpen } from 'open'; import { STATIC_PATH } from '../constants'; -import { canParse, castArray, color } from '../helpers'; +import { castArray, color } from '../helpers'; +import { canParse } from '../helpers/url'; import { logger } from '../logger'; import type { NormalizedConfig, Routes } from '../types'; import { getHostInUrl } from './helper'; From ed53ca25a9768c813378683b501a9b246c9b50fe Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 5 Oct 2025 17:22:08 +0800 Subject: [PATCH 4/5] fix --- packages/core/src/helpers/compiler.ts | 9 +++++++++ packages/core/src/helpers/index.ts | 9 --------- packages/core/src/plugins/appIcon.ts | 7 +++++-- packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts | 3 ++- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/core/src/helpers/compiler.ts b/packages/core/src/helpers/compiler.ts index 4cbd9d48af..88b9834d04 100644 --- a/packages/core/src/helpers/compiler.ts +++ b/packages/core/src/helpers/compiler.ts @@ -34,3 +34,12 @@ export const applyToCompiler = ( apply(compiler, 0); } }; + +export const addCompilationError = ( + compilation: Rspack.Compilation, + message: string, +): void => { + compilation.errors.push( + new compilation.compiler.webpack.WebpackError(message), + ); +}; diff --git a/packages/core/src/helpers/index.ts b/packages/core/src/helpers/index.ts index 253c997c2b..bb36a8a0d0 100644 --- a/packages/core/src/helpers/index.ts +++ b/packages/core/src/helpers/index.ts @@ -210,15 +210,6 @@ export const isTTY = (type: 'stdin' | 'stdout' = 'stdout'): boolean => { ); }; -export const addCompilationError = ( - compilation: Rspack.Compilation, - message: string, -): void => { - compilation.errors.push( - new compilation.compiler.webpack.WebpackError(message), - ); -}; - export async function hash(data: string): Promise { const crypto = await import('node:crypto'); // Available in Node.js v20.12.0 diff --git a/packages/core/src/plugins/appIcon.ts b/packages/core/src/plugins/appIcon.ts index b555fa8244..67d1cdc81f 100644 --- a/packages/core/src/plugins/appIcon.ts +++ b/packages/core/src/plugins/appIcon.ts @@ -1,7 +1,10 @@ import path from 'node:path'; import { promisify } from 'node:util'; -import { addCompilationError, color, pick } from '../helpers'; -import { getPublicPathFromCompiler } from '../helpers/compiler'; +import { color, pick } from '../helpers'; +import { + addCompilationError, + getPublicPathFromCompiler, +} from '../helpers/compiler'; import { fileExistsByCompilation } from '../helpers/fs'; import { ensureAssetPrefix, isURL } from '../helpers/url'; import { requireCompiledPackage } from '../helpers/vendors'; diff --git a/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts b/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts index 60605e0ee5..1189985e6b 100644 --- a/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts +++ b/packages/core/src/rspack-plugins/RsbuildHtmlPlugin.ts @@ -1,7 +1,8 @@ import path from 'node:path'; import { promisify } from 'node:util'; import type { Compilation, Compiler } from '@rspack/core'; -import { addCompilationError, color, isFunction, partition } from '../helpers'; +import { color, isFunction, partition } from '../helpers'; +import { addCompilationError } from '../helpers/compiler'; import { ensureAssetPrefix, isURL } from '../helpers/url'; import { logger } from '../logger'; import { getHTMLPlugin } from '../pluginHelper'; From f0ab25b7dc2727cc3ce77f44e57ec95f4b79760b Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 5 Oct 2025 17:42:36 +0800 Subject: [PATCH 5/5] fix --- e2e/cases/hmr/reconnect/index.test.ts | 2 +- packages/core/src/server/assets-middleware/index.ts | 6 ------ packages/core/tests/helpers.test.ts | 9 ++------- packages/core/tests/rspackVersion.test.ts | 5 ++++- 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/e2e/cases/hmr/reconnect/index.test.ts b/e2e/cases/hmr/reconnect/index.test.ts index b1f7e2b388..8a3377cd86 100644 --- a/e2e/cases/hmr/reconnect/index.test.ts +++ b/e2e/cases/hmr/reconnect/index.test.ts @@ -5,7 +5,7 @@ import { expect, rspackTest } from '@e2e/helper'; const cwd = __dirname; rspackTest( - 'should reconnect Web Socket server as expected', + 'should reconnect WebSocket server as expected', async ({ page, dev, devOnly, editFile }) => { await fs.promises.cp(join(cwd, 'src'), join(cwd, 'test-temp-src'), { recursive: true, diff --git a/packages/core/src/server/assets-middleware/index.ts b/packages/core/src/server/assets-middleware/index.ts index c635f107df..39405b4d09 100644 --- a/packages/core/src/server/assets-middleware/index.ts +++ b/packages/core/src/server/assets-middleware/index.ts @@ -38,12 +38,6 @@ export type OutputFileSystem = Rspack.OutputFileSystem & { ) => ReadStream; }; -export type Options = { - writeToDisk?: - | boolean - | ((targetPath: string, compilationName?: string) => boolean); -}; - export type AssetsMiddlewareClose = ( callback: (err?: Error | null) => void, ) => void; diff --git a/packages/core/tests/helpers.test.ts b/packages/core/tests/helpers.test.ts index e73c98fbc0..588590dded 100644 --- a/packages/core/tests/helpers.test.ts +++ b/packages/core/tests/helpers.test.ts @@ -1,12 +1,7 @@ import { join, sep } from 'node:path'; -import { - ensureAssetPrefix, - isPlainObject, - isWebTarget, - pick, - prettyTime, -} from '../src/helpers'; +import { isPlainObject, isWebTarget, pick, prettyTime } from '../src/helpers'; import { dedupeNestedPaths, getCommonParentPath } from '../src/helpers/path'; +import { ensureAssetPrefix } from '../src/helpers/url'; import { getRoutes, normalizeUrl } from '../src/server/helper'; import type { InternalContext } from '../src/types'; diff --git a/packages/core/tests/rspackVersion.test.ts b/packages/core/tests/rspackVersion.test.ts index 7f8b77a92c..e3d3b6e364 100644 --- a/packages/core/tests/rspackVersion.test.ts +++ b/packages/core/tests/rspackVersion.test.ts @@ -1,4 +1,7 @@ -import { isSatisfyRspackVersion, rspackMinVersion } from '../src/helpers'; +import { + isSatisfyRspackVersion, + rspackMinVersion, +} from '../src/helpers/version'; describe('rspack version', () => { it('isSatisfyRspackVersion', () => {