Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 460|回复: 0

webpack4 系列教程(三): 多页面解决方案--提取公共代码

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-27 15:42:08 | 显示全部楼层 |阅读模式

    这节课讲解webpack4打包多页面应用过程中的提取公共代码部分。相比于webpack34.0版本用optimization.splitChunks配置替换了3.0版本的CommonsChunkPlugin插件。在使用和配置上,更加方便和清晰。

    >>> 本节课源码

    >>> 所有课程源码

    1. 准备工作

    按照惯例,我们在src/文件夹下创建pageA.jspageB.js分别作为两个入口文件。同时,这两个入口文件同时引用subPageA.jssubPageB.js,而subPageA.jssubPageB.js又同时引用module.js文件。

    代码目录结构如下图所示:

    代码目录

    希望大家理清逻辑关系,下面从底层往上层进行代码书写。

    module.js:

    export default "module";
    

    subPageA.js:

    import "./module";
    export default "subPageA";
    

    subPageB.js:

    import "./module";
    export default "subPageB";
    

    正如我们所见,subPageA.jssubPageB.js同时引用module.js

    最后,我们封装入口文件。而为了让情况更真实,这两个入口文件又同时引用了lodash这个第三方库

    pageA.js:

    import "./subPageA";
    import "./subPageB";
    
    import * as _ from "lodash";
    console.log("At page 'A' :", _);
    
    export default "pageA";
    

    pageB.js:

    import "./subPageA";
    import "./subPageB";
    
    import * as _ from "lodash";
    console.log("At page 'B' :", _);
    
    export default "pageB";
    

    好了,到此为止,需要编写的代码已经完成了。>>> src 文件夹项目源码

    2. 编写webpack配置文件

    首先我们应该安装先关的库,创建package.json,输入以下内容:

    {
      "devDependencies": {
        "webpack": "^4.15.1"
      },
      "dependencies": {
        "lodash": "^4.17.10"
      }
    }
    

    在命令行中运行npm install即可。

    然后配置webpack.config.js文件。文件配置如下:

    const webpack = require("webpack");
    const path = require("path");
    
    module.exports = {
      // 多页面应用
      entry: {
        pageA: "./src/pageA.js",
        pageB: "./src/pageB.js"
      },
      output: {
        path: path.resolve(__dirname, "dist"),
        filename: "[name].bundle.js",
        chunkFilename: "[name].chunk.js"
      },
      optimization: {
        splitChunks: {
          cacheGroups: {
            // 注意: priority属性
            // 其次: 打包业务中公共代码
            common: {
              name: "common",
              chunks: "all",
              minSize: 1,
              priority: 0
            },
            // 首先: 打包node_modules中的文件
            vendor: {
              name: "vendor",
              test: /[\\/]node_modules[\\/]/,
              chunks: "all",
              priority: 10
            }
          }
        }
      }
    };
    

    着重来看optimization.splitChunks配置。我们将需要打包的代码放在cacheGroups属性中。

    其中,每个键对值就是被打包的一部分。例如代码中的commonvendor。值得注意的是,针对第三方库(例如lodash)通过设置priority来让其先被打包提取,最后再提取剩余代码。

    所以,上述配置中公共代码的提取顺序其实是:

    ... ...
    vendor: {
      name: "vendor",
      test: /[\\/]node_modules[\\/]/,
      chunks: "all",
      priority: 10
    },
    common: {
        name: "common",
        chunks: "all",
        minSize: 1,
        priority: 0
    }
    ... ...
    

    3. 打包和引用

    命令行中运行webpack即可打包。可以看到,我们成功提取了公共代码,如下图所示:

    打包结果

    最后,打包的结果在dist/文件夹下面,我们要在index.html中引用打包好的js文件,index.html代码如下:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    
    <body>
      <script src="./dist/common.chunk.js"></script>
      <script src="./dist/vendor.chunk.js"></script>
      <script src="./dist/pageA.bundle.js"></script>
      <script src="./dist/pageB.bundle.js"></script>
    </body>
    
    </html>
    

    使用 Chrome 或者 Firfox 打开index.html,并且打开控制台即可。


    欢迎技术交流,引用请注明出处。
    个人网站:GodBMW.com
    原文链接:webpack4 系列教程(三): 多页面解决方案--提取公共代码

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-24 04:44 , Processed in 0.062512 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表