From 3b79059fe2ee16f4b4ad1f1ed3dfeb680d624128 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 20 Apr 2023 20:21:12 +0300 Subject: [PATCH] fix(perf): reduced startup time --- packages/webpack-cli/src/webpack-cli.ts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/webpack-cli/src/webpack-cli.ts b/packages/webpack-cli/src/webpack-cli.ts index c5ab34cd6bb..9ccde155c1c 100644 --- a/packages/webpack-cli/src/webpack-cli.ts +++ b/packages/webpack-cli/src/webpack-cli.ts @@ -55,9 +55,7 @@ const fs = require("fs"); const path = require("path"); const { pathToFileURL } = require("url"); const util = require("util"); - const { program, Option } = require("commander"); -const envinfo = require("envinfo"); const WEBPACK_PACKAGE = process.env.WEBPACK_PACKAGE || "webpack"; const WEBPACK_DEV_SERVER_PACKAGE = process.env.WEBPACK_DEV_SERVER_PACKAGE || "webpack-dev-server"; @@ -449,6 +447,8 @@ class WebpackCLI implements IWebpackCLI { defaultInformation.npmPackages = `{${defaultPackages.map((item) => `*${item}*`).join(",")}}`; + const envinfo = await this.tryRequireThenImport("envinfo", false); + let info = await envinfo.run(defaultInformation, envinfoConfig); info = info.replace(/npmPackages/g, "Packages"); @@ -1873,19 +1873,18 @@ class WebpackCLI implements IWebpackCLI { ".webpack/webpackfile", ] .map((filename) => - // Since .cjs is not available on interpret side add it manually to default config extension list - [...Object.keys(interpret.extensions), ".cjs"].map((ext) => ({ - path: path.resolve(filename + ext), - ext: ext, - module: interpret.extensions[ext], - })), + // Prioritize popular extensions first to avoid unnecessary fs calls + // TODO ".mts" is not supported by `interpret`, need to add it + [".js", ".mjs", ".cjs", ".ts", ".cts", ...Object.keys(interpret.extensions)].map((ext) => + path.resolve(filename + ext), + ), ) .reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); let foundDefaultConfigFile; for (const defaultConfigFile of defaultConfigFiles) { - if (!fs.existsSync(defaultConfigFile.path)) { + if (!fs.existsSync(defaultConfigFile)) { continue; } @@ -1894,7 +1893,7 @@ class WebpackCLI implements IWebpackCLI { } if (foundDefaultConfigFile) { - const loadedConfig = await loadConfigByPath(foundDefaultConfigFile.path, options.argv); + const loadedConfig = await loadConfigByPath(foundDefaultConfigFile, options.argv); config.options = loadedConfig.options as WebpackConfiguration[];