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

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

编写可维护的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/

    你可能感兴趣的文章
    NIO与零拷贝和AIO
    查看>>
    NIO同步网络编程
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NIO笔记---上
    查看>>
    NIO蔚来 面试——IP地址你了解多少?
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    NISP国家信息安全水平考试,收藏这一篇就够了
    查看>>
    NIS服务器的配置过程
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NiuShop开源商城系统 SQL注入漏洞复现
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 模型中的偏差和公平性检测
    查看>>
    Vue3.0 性能提升主要是通过哪几方面体现的?
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP三大特征抽取器:CNN、RNN与Transformer全面解析
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>