UNPKG

@winner-fed/bundler-webpack

Version:

@winner-fed/bundler-webpack

242 lines (240 loc) 10.1 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/config/config.ts var config_exports = {}; __export(config_exports, { getConfig: () => getConfig }); module.exports = __toCommonJS(config_exports); var import_case_sensitive_paths_webpack_plugin = __toESM(require("@umijs/case-sensitive-paths-webpack-plugin")); var import_utils = require("@winner-fed/utils"); var import_path = require("path"); var import_webpack = __toESM(require("../../compiled/webpack")); var import_webpack_5_chain = __toESM(require("../../compiled/webpack-5-chain")); var import_constants = require("../constants"); var import_RuntimePublicPathPlugin = require("../plugins/RuntimePublicPathPlugin"); var import_types = require("../types"); var import_browsersList = require("../utils/browsersList"); var import_assetRules = require("./assetRules"); var import_bundleAnalyzerPlugin = require("./bundleAnalyzerPlugin"); var import_compressPlugin = require("./compressPlugin"); var import_copyPlugin = require("./copyPlugin"); var import_cssRules = require("./cssRules"); var import_definePlugin = require("./definePlugin"); var import_detectCssModulesInDependence = require("./detectCssModulesInDependence"); var import_detectDeadCodePlugin = require("./detectDeadCodePlugin"); var import_forkTSCheckerPlugin = require("./forkTSCheckerPlugin"); var import_harmonyLinkingErrorPlugin = require("./harmonyLinkingErrorPlugin"); var import_ignorePlugin = require("./ignorePlugin"); var import_javaScriptRules = require("./javaScriptRules"); var import_manifestPlugin = require("./manifestPlugin"); var import_miniCSSExtractPlugin = require("./miniCSSExtractPlugin"); var import_nodePolyfill = require("./nodePolyfill"); var import_progressPlugin = require("./progressPlugin"); var import_speedMeasureWebpackPlugin = require("./speedMeasureWebpackPlugin"); var import_ssrPlugin = __toESM(require("./ssrPlugin")); async function getConfig(opts) { var _a, _b, _c; const { userConfig } = opts; const isDev = opts.env === import_types.Env.development; const config = new import_webpack_5_chain.default(); userConfig.targets || (userConfig.targets = import_constants.DEFAULT_BROWSER_TARGETS); userConfig.inlineLimit = parseInt(userConfig.inlineLimit ?? "10000", 10); const useHash = !!(opts.hash || userConfig.hash && !isDev); const applyOpts = { name: opts.name, config, userConfig, cwd: opts.cwd, env: opts.env, babelPreset: opts.babelPreset, extraBabelPlugins: opts.extraBabelPlugins || [], extraBabelPresets: opts.extraBabelPresets || [], extraBabelIncludes: opts.extraBabelIncludes || [], extraBabelExcludes: opts.extraBabelExcludes || [], extraEsbuildLoaderHandler: opts.extraEsbuildLoaderHandler || [], browsers: (0, import_browsersList.getBrowsersList)({ targets: userConfig.targets }), useHash, staticPathPrefix: opts.staticPathPrefix !== void 0 ? opts.staticPathPrefix : "static/" }; config.name(opts.name); config.mode(opts.env); config.stats("none"); Object.keys(opts.entry).forEach((key) => { const entry = config.entry(key); if (isDev && opts.hmr) { entry.add(require.resolve("../../client/client/client")); } entry.add(opts.entry[key]); }); config.devtool( isDev ? userConfig.devtool === false ? false : userConfig.devtool || import_constants.DEFAULT_DEVTOOL : userConfig.devtool ); const absOutputPath = (0, import_path.resolve)( opts.cwd, userConfig.outputPath || import_constants.DEFAULT_OUTPUT_PATH ); const disableCompress = process.env.COMPRESS === "none"; config.output.path(absOutputPath).filename(useHash ? `[name].[contenthash:8].js` : `[name].js`).chunkFilename( useHash ? `[name].[contenthash:8].async.js` : `[name].async.js` ).publicPath(userConfig.publicPath || "auto").pathinfo(isDev || disableCompress).set( "assetModuleFilename", `${applyOpts.staticPathPrefix}[name].[hash:8][ext]` ).set("hashFunction", "xxhash64"); config.resolve.set("symlinks", true).modules.add("node_modules").end().alias.merge(userConfig.alias || {}).end().extensions.merge([ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".json", ".wasm" ]).end(); config.externals(userConfig.externals || []); config.target(["web", "es5"]); config.experiments({ topLevelAwait: true, outputModule: !!userConfig.esm }); await (0, import_nodePolyfill.addNodePolyfill)(applyOpts); await (0, import_javaScriptRules.addJavaScriptRules)(applyOpts); await (0, import_cssRules.addCSSRules)(applyOpts); await (0, import_assetRules.addAssetRules)(applyOpts); await (0, import_miniCSSExtractPlugin.addMiniCSSExtractPlugin)(applyOpts); await (0, import_ignorePlugin.addIgnorePlugin)(applyOpts); await (0, import_definePlugin.addDefinePlugin)(applyOpts); await (0, import_progressPlugin.addProgressPlugin)(applyOpts); await (0, import_detectDeadCodePlugin.addDetectDeadCodePlugin)(applyOpts); await (0, import_forkTSCheckerPlugin.addForkTSCheckerPlugin)(applyOpts); if (!opts.disableCopy) { await (0, import_copyPlugin.addCopyPlugin)(applyOpts); } await (0, import_manifestPlugin.addManifestPlugin)(applyOpts); if (isDev && opts.hmr) { config.plugin("hmr").use(import_webpack.default.HotModuleReplacementPlugin); } await (0, import_ssrPlugin.default)(applyOpts); await (0, import_compressPlugin.addCompressPlugin)(applyOpts); await (0, import_harmonyLinkingErrorPlugin.addHarmonyLinkingErrorPlugin)(applyOpts); await (0, import_detectCssModulesInDependence.addDependenceCssModulesDetector)(applyOpts); if (userConfig.runtimePublicPath) { config.plugin("runtimePublicPath").use(import_RuntimePublicPathPlugin.RuntimePublicPathPlugin); } config.plugin("case-sensitive-paths").use(import_case_sensitive_paths_webpack_plugin.default); if (opts.cache) { config.cache({ type: "filesystem", version: require("../../package.json").version, buildDependencies: { config: opts.cache.buildDependencies || [] }, cacheDirectory: opts.cache.cacheDirectory || // 使用 rootDir 是在有 APP_ROOT 时,把 cache 目录放在根目录下 (0, import_path.join)( opts.rootDir || opts.cwd, "node_modules", ".cache", "bundler-webpack" ) }); if ( /*isTnpm*/ require("@winner-fed/utils/package").__npminstall_done ) { const nodeModulesPath = opts.cache.absNodeModulesPath || (0, import_path.join)(opts.rootDir || opts.cwd, "node_modules"); const localLinkedNodeModules = Object.keys( Object.assign( {}, (_a = opts.pkg) == null ? void 0 : _a.dependencies, (_b = opts.pkg) == null ? void 0 : _b.peerDependencies, (_c = opts.pkg) == null ? void 0 : _c.devDependencies ) ).map((pkg) => { try { return (0, import_path.resolve)( import_utils.resolve.sync(`${pkg}/package.json`, { basedir: opts.rootDir || opts.cwd, preserveSymlinks: false }), "../node_modules" ); } catch { return opts.rootDir || opts.cwd; } }).filter((pkg) => !pkg.startsWith(opts.rootDir || opts.cwd)); if (localLinkedNodeModules.length) { import_utils.logger.info( `Detected local linked tnpm node_modules, to avoid oom, they will be treated as immutablePaths & managedPaths in webpack snapshot:` ); localLinkedNodeModules.forEach((p) => import_utils.logger.info(` ${p}`)); } config.snapshot({ immutablePaths: [nodeModulesPath, ...localLinkedNodeModules], managedPaths: [nodeModulesPath, ...localLinkedNodeModules] }); } config.infrastructureLogging({ level: "error", ...process.env.WEBPACK_FS_CACHE_DEBUG ? { debug: /webpack\.cache/ } : {} }); } if (opts.analyze) { await (0, import_bundleAnalyzerPlugin.addBundleAnalyzerPlugin)(applyOpts); } if (opts.chainWebpack) { await opts.chainWebpack(config, { env: opts.env, webpack: import_webpack.default }); } if (userConfig.chainWebpack) { await userConfig.chainWebpack(config, { env: opts.env, webpack: import_webpack.default }); } let webpackConfig = config.toConfig(); webpackConfig = await (0, import_speedMeasureWebpackPlugin.addSpeedMeasureWebpackPlugin)({ webpackConfig }); if (opts.modifyWebpackConfig) { webpackConfig = await opts.modifyWebpackConfig(webpackConfig, { env: opts.env, webpack: import_webpack.default }); } return webpackConfig; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { getConfig });