博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现Adler32算法(附完整源码)
    查看>>
    Objective-C实现AES算法(附完整源码)
    查看>>
    Objective-C实现AffineCipher仿射密码算法(附完整源码)
    查看>>
    Objective-C实现aliquot sum等分求和算法(附完整源码)
    查看>>
    Objective-C实现all combinations所有组合算法(附完整源码)
    查看>>
    Objective-C实现all permutations所有排列算法(附完整源码)
    查看>>
    Objective-C实现all subsequences所有子序列算法(附完整源码)
    查看>>
    Objective-C实现AlphaNumericalSort字母数字排序算法(附完整源码)
    查看>>
    Objective-C实现alternate disjoint set不相交集算法(附完整源码)
    查看>>
    Objective-C实现alternative list arrange备选列表排列算法(附完整源码)
    查看>>
    Objective-C实现An Armstrong number阿姆斯特朗数算法(附完整源码)
    查看>>
    Objective-C实现anagrams字谜算法(附完整源码)
    查看>>
    Objective-C实现ApproximationMonteCarlo蒙特卡洛方法计算pi值算法 (附完整源码)
    查看>>
    Objective-C实现area under curve曲线下面积算法(附完整源码)
    查看>>
    Objective-C实现argmax函数功能(附完整源码)
    查看>>
    Objective-C实现arithmetic算术算法(附完整源码)
    查看>>
    Objective-C实现armstrong numbers阿姆斯壮数算法(附完整源码)
    查看>>
    Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现average absolute deviation平均绝对偏差算法(附完整源码)
    查看>>