diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 2f8e0d1098..2560920b2d 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -65,7 +65,6 @@ // some loaders still depend on loader-utils v2 "loader-utils", // pure esm packages can not be used now - "gzip-size", "globby", "open", "strip-ansi", diff --git a/packages/core/package.json b/packages/core/package.json index 2735a87fb7..21e57116ff 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -77,7 +77,6 @@ "dotenv": "16.4.5", "dotenv-expand": "11.0.6", "fs-extra": "^11.2.0", - "gzip-size": "^6.0.0", "http-compression": "1.0.20", "http-proxy-middleware": "^2.0.6", "jiti": "^1.21.6", diff --git a/packages/core/prebundle.config.mjs b/packages/core/prebundle.config.mjs index bd1581c41c..78d31daeeb 100644 --- a/packages/core/prebundle.config.mjs +++ b/packages/core/prebundle.config.mjs @@ -40,7 +40,6 @@ export default { 'connect', 'rspack-manifest-plugin', 'webpack-merge', - 'gzip-size', { name: 'chokidar', externals: { @@ -127,9 +126,6 @@ export default { // The webpack-bundle-analyzer version was locked to v4.9.0 to be compatible with Rspack // If we need to upgrade the version, please check if the chunk detail can be displayed correctly name: 'webpack-bundle-analyzer', - externals: { - 'gzip-size': '../gzip-size', - }, }, { name: 'autoprefixer', diff --git a/packages/core/src/plugins/fileSize.ts b/packages/core/src/plugins/fileSize.ts index a094e70c28..017e3cd104 100644 --- a/packages/core/src/plugins/fileSize.ts +++ b/packages/core/src/plugins/fileSize.ts @@ -4,6 +4,8 @@ */ import fs from 'node:fs'; import path from 'node:path'; +import { promisify } from 'node:util'; +import zlib from 'node:zlib'; import color from 'picocolors'; import { CSS_REGEX, HTML_REGEX, JS_REGEX } from '../constants'; import { logger } from '../logger'; @@ -14,6 +16,13 @@ import type { StatsAsset, } from '../types'; +const gzip = promisify(zlib.gzip); + +async function gzipSize(input: Buffer) { + const data = await gzip(input); + return data.length; +} + /** Filter source map and license files */ export const filterAsset = (asset: string): boolean => !/\.map$/.test(asset) && !/\.LICENSE\.txt$/.test(asset); @@ -71,9 +80,7 @@ async function printFileSizes( return logs; } - const { default: gzipSize } = await import('gzip-size'); - - const formatAsset = ( + const formatAsset = async ( asset: StatsAsset, distPath: string, distFolder: string, @@ -81,7 +88,7 @@ async function printFileSizes( const fileName = asset.name.split('?')[0]; const contents = fs.readFileSync(path.join(distPath, fileName)); const size = contents.length; - const gzippedSize = gzipSize.sync(contents); + const gzippedSize = await gzipSize(contents); return { size, @@ -93,7 +100,7 @@ async function printFileSizes( }; }; - const getAssets = () => { + const getAssets = async () => { const distPath = stats.compilation.outputOptions.path; if (!distPath) { @@ -119,11 +126,11 @@ async function printFileSizes( const distFolder = path.relative(rootPath, distPath); - return filteredAssets.map((asset) => - formatAsset(asset, distPath, distFolder), + return Promise.all( + filteredAssets.map((asset) => formatAsset(asset, distPath, distFolder)), ); }; - const assets = getAssets(); + const assets = await getAssets(); if (assets.length === 0) { return logs; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index e146bf0271..9c2fbca702 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -18,7 +18,6 @@ "semver": ["./compiled/semver"], "connect": ["./compiled/connect"], "chokidar": ["./compiled/chokidar"], - "gzip-size": ["./compiled/gzip-size"], "commander": ["./compiled/commander"], "on-finished": ["./compiled/on-finished"], "autoprefixer": ["./compiled/autoprefixer"], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5323024d8e..0a92d7697c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -746,9 +746,6 @@ importers: fs-extra: specifier: ^11.2.0 version: 11.2.0 - gzip-size: - specifier: ^6.0.0 - version: 6.0.0 http-compression: specifier: 1.0.20 version: 1.0.20