当前位置: 首页 > news >正文

Webpack的常用概念和基本配置

// webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')module.exports = {// 入口文件 定义 Webpack 构建依赖图的起点entry: './src/index.js',// 指定打包后的资源输出位置和命名规则。output: {filename: '[name].bundle.js',path: path.resolve(__dirname, '../dist'),chunkFilename: '[name].[contenthash].chunk.js', // 动态导入的 chunk 命名规则 用于代码分割publicPath: '/', // 确保 chunk 的公共路径正确clean: true, // 自动清理旧文件(Webpack 5+)},// 模块规则 - 覆盖基础配置 处理非js文件 转为webpack能识别的模块// Webpack 将每个文件视为模块(如 JS、CSS、图片),通过依赖关系构建依赖图。// loader执行流程:文件资源 (如 .scss) → 匹配 Loader 规则 → 按顺序应用 Loaders → 转换为 JS 模块// Loaders 从右到左(或从下到上)执行。 例如: use: ['style-loader', 'css-loader', 'sass-loader'] 的执行顺序为: sass-loader → css-loader → style-loader 。module: {rules: [// 处理 CSS 文件//style-loader:将 CSS 注入 DOM。//css-loader:解析 CSS 文件中的 @import 和 url()。//sass-loader:将 Sass/SCSS 编译为 CSS。//sass:Sass 编译器(Dart Sass 实现)。//postcss-loader 和 autoprefixer:自动添加浏览器前缀。//mini-css-extract-plugin:提取 CSS 为独立文件(生产环境推荐)。//css-minimizer-webpack-plugin:压缩 CSS(生产环境推荐)。{test: /\.css$/,use: [// 开发环境用 style-loader,生产环境用 MiniCssExtractPlugin.loaderprocess.env.NODE_ENV === 'production' ? MiniCssExtractPlugin.loader : 						'style-loader','css-loader','postcss-loader', // 可选:添加浏览器前缀],},// 处理 SCSS/Sass 文件{test: /\.(scss|sass)$/,use: [process.env.NODE_ENV === 'production' ? MiniCssExtractPlugin.loader : 							'style-loader','css-loader','postcss-loader', // 可选:添加浏览器前缀'sass-loader',],},]},// 插件//扩展 Webpack 的能力,干预构建流程的任意阶段。//执行更复杂的任务,如代码压缩、资源优化、环境变量注入等。// 初始化 → 读取配置 → 创建 Compiler → 挂载 Plugins → 编译模块 → 优化 → 输出plugins: [// 自动生成 HTML 文件,并注入打包后的资源new HtmlWebpackPlugin({template: './src/index.html',}),// 提取 CSS 为独立文件//mini-css-extract-plugin:提取 CSS 为独立文件(生产环境推荐)。new MiniCssExtractPlugin({filename: '[name].[contenthash].css',}),// 压缩new CompressionPlugin({algorithm: 'gzip',test: /\.(js|css|html|svg)$/,threshold: 10240, // 10kb 以上压缩minRatio: 0.8}),// 注入全局环境变量new webpack.DefinePlugin({'process.env.NODE_ENV': JSON.stringify('production'),'__VUE_OPTIONS_API__': true,'__VUE_PROD_DEVTOOLS__': false})],// 优化optimization: {usedExports: true, // 标记未使用的导出minimize: true, // 启用压缩(删除未使用代码)minimizer: [// 压缩 CSS(生产环境)new CssMinimizerPlugin(),],// 代码分割 优化公共代码提取 将代码拆分为多个文件(chunks),实现按需加载或并行加载,优化性能。splitChunks: {chunks: 'all', // 对所有模块进行分割(包括异步和非异步)cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,name: 'vendors', // 提取 node_modules 代码为 vendors 块priority: 10, // 优先级reuseExistingChunk: true,},common: {minChunks: 2, // 被至少两个 chunk 引用的代码name: 'common',priority: 5,reuseExistingChunk: true,},},},},
}
http://www.jsqmd.com/news/330925/

相关文章:

  • 测试文件所使用的依赖
  • 位运算---LC371两整数之和
  • 宏智树 AI:把期刊论文写作变成 “按图索骥”,新手也能精准踩中录用要点
  • SSM毕设项目:基于SSM的学生选课管理系统(源码+文档,讲解、调试运行,定制等)
  • Spring Boot 与数据源的集成
  • jQuery Mobile 表单选择
  • 【毕业设计】基于SSM的学生选课管理系统(源码+文档+远程调试,全bao定制等)
  • 宏智树 AI:3 类学术 PPT 零门槛!开题、答辩、汇报 30 分钟搞定
  • Spring Boot 的安全机制
  • 古文观芷App搜索方案深度解析:打造极致性能的古文搜索引擎
  • 为什么懂开发的UI设计公司更容易成功?
  • jQuery Mobile 按钮:全面解析与最佳实践
  • Python 学习资源汇总手册
  • 【笔记】【筹码分布图】
  • 医疗连续体机器人模块化控制界面设计(2025年更新版Python库) - 实践
  • AI大模型基于LangChain 进行RAG与Agent智能体开发
  • ScalingLaws-2022-Chinchilla-2:既然Dₒₚₜ/Nₒₚₜ≈20,为什么LLaMA系列用的D/N远大于20【Chinchilla比例:每个参数大约对应20个token】
  • 汉中火锅串串聚餐首选|把把赢火锅串串,24小时鲜货不停歇
  • 开题报告 雅韵古诗词系统python爬虫
  • 《提示工程架构师:开启Agentic AI创新价值宝库的钥匙》
  • 完整教程:程序员技术成长导航,专栏汇总
  • 开发一个Android App: 打牌计分器
  • 【毕业设计】基于SSM的疫情健康上报管理系统(源码+文档+远程调试,全bao定制等)
  • SSM毕设项目推荐-基于SSM实现手机销售商城系统基于SSM的手机商城【附源码+文档,调试定制服务】
  • 提示工程架构师必备:响应优化的服务降级策略
  • 软件测试基础知识
  • 电商数据分析中的多步骤推理挑战
  • 题解:Transformation
  • 高二上期末考试总结
  • 【毕业设计】基于SSM的手机商城(源码+文档+远程调试,全bao定制等)