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

    你可能感兴趣的文章
    node不是内部命令时配置node环境变量
    查看>>
    node中fs模块之文件操作
    查看>>
    Node中同步与异步的方式读取文件
    查看>>
    Node中的Http模块和Url模块的使用
    查看>>
    Node中自启动工具supervisor的使用
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    node全局对象 文件系统
    查看>>
    Node出错导致运行崩溃的解决方案
    查看>>
    Node响应中文时解决乱码问题
    查看>>
    node基础(二)_模块以及处理乱码问题
    查看>>
    node安装及配置之windows版
    查看>>
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    node模块化
    查看>>
    node环境下使用import引入外部文件出错
    查看>>
    node编译程序内存溢出
    查看>>
    Node读取并输出txt文件内容
    查看>>