博客
关于我
webpack简单配置及其用法二
阅读量:395 次
发布时间:2019-03-05

本文共 2685 字,大约阅读时间需要 8 分钟。

编写可维护的Webpack构建配置

构建配置包设计

将Webpack构建配置抽离成npm包的意义在于:

  • 实用性:业务开发者无需关注构建配置,统一团队构建脚本。
  • 可维护性:构建配置合理拆分,可通过readme、changelog等文档进行管理。
  • 质量:通过冒烟测试、单元测试和持续集成确保构建质量。

构建配置管理的可选方案

  • 环境隔离配置:通过多个配置文件管理不同环境的构建,例如:

    • 基础配置:webpack.base.js
    • 开发环境:webpack.dev.js
    • 生产环境:webpack.prod.js
    • SSR环境:webpack.ssr.js使用Webpack的--config参数指定配置文件。
  • 构建配置作为库:将配置设计成一个可复用的库,如hjs-webpack、Neutrino或webpack-blocks。规范化开发流程,确保版本控制和代码质量。

  • 工具化管理:使用工具如create-react-app、kyt或nwb进行构建管理,提供更高效的配置和封装。

  • 单一配置文件:将所有配置合并在一个文件中,通过--env参数控制环境切换。适合小团队使用,大型团队可选择方案3。

  • 使用Webpack-merge组合配置

    Webpack-merge是一种灵活的配置合并工具。示例代码如下:

    const merge = require('webpack-merge');module.exports = merge({  a: [1],  b: 5,  c: 20}, {  a: [2],  b: 6,  d: 35});

    非对象或非数组项时,后面的值会覆盖前面的值。合并后的结果为:

    {  a: [1, 2],  b: 6,  c: 20,  d: 35}

    构建速度和体积优化策略

    体积优化方法

  • Scope Hoisting:优化模块代码结构,减少冗余代码。
  • Tree Shaking:移除未使用的代码,通过unused-module-plugin等工具实现。
  • 公共资源分离:提取第三方库和公共代码,减少重复打包。
  • 图片压缩:使用Image-webpack-loader进行图片优化,支持多种格式和压缩算法。
  • 动态Polyfill:基于用户使用情况,动态加载所需的polyfill,减少不必要的代码打包。
  • 提升构建速度方法

  • 缓存机制:通过Babel-loader、terser-webpack-plugin等插件开启代码缓存,提升后续构建速度。
  • 预编译资源模块:将常用资源预先打包,减少频繁处理的文件数量。
  • 构建速度分析

    使用以下工具进行构建速度和体积分析:

  • Webpack内置统计:通过stats获取构建统计信息。
  • Speed-Measure-Webpack-Plugin:分析每个插件和loader的耗时。
  • Webpack-Bundle-Analyzer:分析依赖和代码的体积分布。
  • 高版本Webpack和Node.js

    使用最新版本的Webpack和Node.js可以显著提升构建效率。

    缓存优化

    通过缓存提高二次构建速度:

  • Babel Loader:开启解析缓存,避免重复解析相同代码。
  • TerserWebpackPlugin:开启代码压缩缓存。
  • Hard-SourceWebpackPlugin:优化模块转换阶段速度。
  • 构建目标缩小

    通过优化Webpack配置减少打包模块数量:

  • Babel Loader:不解析node_modules中的文件。
  • 优化文件搜索范围
    • resolve.modules:减少模块搜索层级。
    • resolve.mainFields:指定查找入口文件的路径。
    • resolve.extensions:指定文件扩展名。
    • 合理使用alias:简化路径引用。
  • Tree Shaking应用

    Tree Shaking是Webpack默认支持的优化策略,需在ES6+代码中使用。无需的CSS类可以通过PurifyCSS或Uncss删除。

    图片压缩配置

    使用Image-webpack-loader进行图片压缩,支持多种格式和算法:

    module.exports.module.rules = [  {    test: /\.(png|jpg|jpeg|gif|svg)$/,    use: [      {        loader: 'file-loader',        options: {          name: 'img_[name][hash:8].[ext]'        }      },      {        loader: 'image-webpack-loader',        options: {          mozjpeg: {            progressive: true          },          optipng: {            enabled: false          },          pngquant: {            quality: [0.65, 0.90],            speed: 4          },          gifsicle: {            interlaced: false          },          webp: {            quality: 75          }        }      }    ]  }]

    动态Polyfill

    通过Polyfill-Service根据用户需求动态加载所需的polyfill,减少不必要的代码打包。

    掌握Webpack打包原理

    webpack启动过程分析

    执行npm run devwebpack entry.js时,Webpack如何启动?

  • 包路径查找:Node.js查找node_modules/.bin/webpacknode_modules/webpack/bin/webpack.js
  • 命令执行:Webpack CLI执行构建任务,根据配置文件生成打包结果。
  • 栗子:Webpack CLI源码阅读

    Webpack CLI的核心功能是解析Webpack配置并执行构建任务。理解源码有助于深入掌握其工作原理。

    总结

    通过合理的构建配置和优化策略,可以显著提升Webpack的打包速度和代码体积。同时,使用工具化管理和高效的缓存策略,确保构建过程的稳定性和可维护性。

    转载地址:http://ohzzz.baihongyu.com/

    你可能感兴趣的文章
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>