前端开发
使用 Webpack 5+ 打包…
适用于基于 Webpack 5+ 构建前端应用,需要优化 bundle 大小、构建速度、调试与 CI/CD 集成的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
使用 Webpack 5+ 打包 Jav特定
解决思路
- 使用 Webpack 5+ 的静态模块打包能力,从 entry 入口构建依赖图。
- 以最优 bundle size、build performance 和 developer experience 为配置目标。
- 使用 Webpack 5+ 特性,并理解 plugin 与 loader 生态。
- 项目采用 src/ 结构:src/index.js 作为主入口,src/components/ 放 UI 组件,src/utils/ 放工具函数,src/styles/ 放 CSS/SCSS,src/assets/ 放图片/字体等。
- 将 dist/ 作为构建输出目录并加入 .gitignore。
- 拆分 webpack.config.js 主配置、webpack.dev.js 开发配置、webpack.prod.js 生产配置,并保留 package.json。
- 配置 entry:{ main: './src/index.js', vendor: './src/vendor.js' }。
- 配置 output.path 为 path.resolve(__dirname, 'dist')。
- 配置 output.filename 为 '[name].[contenthash].js'。
- 配置 output.clean 为 true。
- 设置 mode: 'production' 或 'development';production 模式启用 tree-shaking、minification 和其他优化。
- 对按需加载使用动态 import:const module = await import('./heavy-module.js')。
- 在 React 中使用 React.lazy(() => import('./LazyComponent'))。
- 配置 optimization.splitChunks:chunks: 'all',cacheGroups.vendor 使用 test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'。
- 启用 tree shaking:使用 ES6 module syntax(import/export)。
- 启用 tree shaking:设置 mode: 'production'。
- 启用 tree shaking:在 package.json 配置 sideEffects。
- 若包无副作用,设置 package.json 的 sideEffects: false。
- 若有副作用文件,设置 package.json 的 sideEffects: ['*.css', '*.scss']。
- 为 tree shaking 配置 Babel:在 @babel/preset-env 中设置 { modules: false }。
- 配置 babel-loader 处理 /\.jsx?$/,并 exclude /node_modules/。
- 配置 ts-loader 处理 /\.tsx?$/,并 exclude /node_modules/。
- 配置 .css 使用 ['style-loader', 'css-loader']。
- 配置 .scss 使用 ['style-loader', 'css-loader', 'sass-loader']。
- 配置 .png/.svg/.jpg/.jpeg/.gif 使用 type: 'asset/resource'。
- 使用 HtmlWebpackPlugin,并设置 template: './src/index.html'。
- 使用 MiniCssExtractPlugin,并设置 filename: '[name].[contenthash].css'。
- 使用 BundleAnalyzerPlugin 做 bundle 分析。
- 使用 webpack-bundle-analyzer 识别大型依赖。
- 启用 tree shaking 移除未使用代码。
- 用更小的替代库替换大型依赖。
- 启用 Gzip 或 Brotli 压缩。
- 配置 cache: { type: 'filesystem' } 提升构建性能。
- 配置 resolve.extensions: ['.js', '.jsx', '.ts', '.tsx']。
- 配置 resolve.alias: { '@': path.resolve(__dirname, 'src') }。
- 生产优化配置 optimization.minimize: true。
- 生产优化使用 minimizer: [new TerserPlugin({ parallel: true }), new CssMinimizerPlugin()]。
- 生产优化配置 moduleIds: 'deterministic'。
- 生产优化配置 runtimeChunk: 'single'。
- 配置 devServer:static: './dist',hot: true,port: 3000,historyApiFallback: true,proxy: { '/api': 'http://localhost:8080' }。
- 使用 webpack.DefinePlugin 定义环境变量,例如 'process.env.API_URL': JSON.stringify(process.env.API_URL)。
- 避免把所有内容打包到单个文件。
- 避免只使用特定函数时导入整个库。
- 开发时不要跳过 source maps。
- 避免硬编码环境特定值。
- 不要忽略 bundle size 警告。
- 使用 source maps 调试,例如 devtool: 'source-map'。
- 定期用 webpack-bundle-analyzer 分析 bundles。
- 部署前本地测试 production builds。
- 使用 stats 选项了解构建输出。
- 保持 Webpack 和 plugins 最新。
- 验证并清理所有用户输入。
- 使用 Content Security Policy headers。
- 避免在 bundles 中暴露敏感数据。
- 在 CI/CD 中缓存 node_modules 和 Webpack cache。
- 在 CI/CD 中使用 --mode production 运行 production builds。
- 在 bundle size budget 违规时让构建失败。
- 生成并存储 bundle analysis reports。
适用边界 · 注意事项
- 项目使用 Vite、Rollup、esbuild 等其他构建工具,或框架已完全封装 Webpack(如 Create React App、Next.js)且不需要自定义配置时。
- 只是简单静态页面、无需依赖图、代码分割、Tree Shaking 等高级打包能力时。
- 无法修改构建配置或不需要运行 Node/Webpack 环境时。