码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • webpack打包优化点


    目录
    • 1. noParse
    • 2. 包含和排除目录
    • 3. IgnorePlugin
    • 4. happypack
    • 5. DllPlugin动态链接库
    • 6. 热更新
    • 7. 开发环境 tree-shaking
    • 8. 抽离公共代码
    • 9. 懒加载

    1. noParse

    作用主要是过滤不需要解析的文件,比如打包的时候依赖了三方库(jquyer、lodash)等,而这些三方库里面没有其他依赖,可以通过配置noParse不去解析文件,提高打包效率。
    是module中的一个属性,设置一个正则表达式,过滤多个库以|分割

    module: {
      noParse: '/jquery|lodash/',
      // rules:[]
    }
    

    2. 包含和排除目录

    指定loader解析的规则,配置包含和排除目录一般两者写其一就行。

    {
      test: /\.js$/,
      use: {
         loader: 'babel-loader',
         options: {
           presets: ['@babel/preset-env'], // 预设,转换js语法
              "plugins": [
                  ["@babel/plugin-proposal-decorators", { "legacy": true }], // 解析类的装饰器
                  ["@babel/plugin-proposal-class-properties", { "loose": true }], // 解析类的属性
                  "@babel/plugin-transform-runtime", // 解析promise,Generator等新的API
              ]
           }
       },
      include: path.resolve(__dirname, 'src'),
      exclude: /node_modules/
    }
    

    3. IgnorePlugin

    该插件是webpack的内置插件,用于忽略某些特定的模块,不被webpack打包进去。

    在实际开发项目时,moment库是非常常用的处理时间的库,虽然设置了语种为中文zh-cn,但是在打包的时候,还是会将所有语言都打包进去。就导致包很大,打包速度慢,locale 目录中存放的是多语种的语言包,不希望全部被打包进文件。此时就可以配置下IgnorePlugin

    // src/index.js
    
    import moment from 'moment'
    
    // 忽略locale后,就必须手动单独引入需要的语言包
    import 'moment/locale/zh-cn';
    
    moment.locale('zh-cn');  //设置中文
    let r = moment().endOf('day').fromNow();
    console.log(r);
    
    // webpack.config.js
    let Webpack = require('webpack');
    module.exports = {
        plugins:[
            new Webpack.IgnorePlugin(/\.\/locale/,/moment/), // locale 目录中存放的是多语种的语言包,不希望全部被打包进文件
        ]
    }
    

    4. happypack

    多线程打包,多用于大型项目,因为在项目很小的时候,效果反而会慢,因为而分配线程,也会消耗时间。

    npm install happypack
    
    let HappyPack = require('happypack');
    
    module.exports = {
        // ...
        module:{
            rules:[
                {
                    test:/\.js$/,
                    use:'HappyPack/loader?id=js' //  id=js  代表打包js
                },
                {
                    test:/\.css$/,
                    use:'HappyPack/loader?id=css' // id=css 代表打包css
                }
            ]
        },
        plugins:[
            new HappyPack({ 
                id:'css', // 打包css
                use:['style-loader','css-loader']
            }),
            new HappyPack({ 
                id:'js', // 打包js
                use:[{ // 原本rules中 loader的配置即可
                    loader:'babel-loader',
                    options:{
                        presets:['@babel/presets-env', '@babel/presets-react']
                    }
                }]
            })
        ]
    }
    

    5. DllPlugin动态链接库

    之前专门整理过完整的一篇关于DllPlugin动态链接库的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。
    webpack性能优化方式之dll--- webpack.dll.config.js

    6. 热更新

    之前专门整理过完整的一篇关于webpack热更新的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。
    webpack4.15.1 学习笔记(三) — 模块热替换HMR

    7. 开发环境 tree-shaking

    之前专门整理过完整的一篇关于webpack tree-shaking的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。
    webpack4.15.1 学习笔记(四) — Tree shaking

    8. 抽离公共代码

    之前专门整理过完整的一篇关于webpack抽离公共代码的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。
    webpack4.15.1 学习笔记(六) — 代码拆分(Code Splitting)

    9. 懒加载

    之前专门整理过完整的一篇关于webpack懒加载的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。
    webpack4.15.1 学习笔记(七) — 懒加载(Lazy Loading)

  • 相关阅读:
    湖南首个,万应低代码软件技术专业校企共建基地落成!
    章鱼网络在 NEARCON23 发布 Octopus 2.0
    到底是哪里出了问题_蓝桥杯2023子矩阵
    Java之编程思想路径
    使用folium绘制移动轨迹
    【子序列】522. 最长特殊序列 II
    Chrome常用插件收集整理
    PHP毕业设计毕设辅导课(2):PHP 变量,PHP 变量的定义,PHP 变量作用域,Static 作用域,参数作用域
    VUE框架(一)
    1.5 HDFS分布式文件系统-hadoop-最全最完整的保姆级的java大数据学习资料
  • 原文地址:https://www.cnblogs.com/echoyya/p/16659286.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号