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

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

>>> 本节课源码html

>>> 全部课程源码java

1. 准备工做

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

代码目录结构以下图所示:webpack

代码目录

但愿你们理清逻辑关系,下面从底层往上层进行代码书写。git

module.js:github

export default "module";

subPageA.js:web

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

subPageB.js:npm

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

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

最后,咱们封装入口文件。而为了让状况更真实,这两个入口文件又同时引用了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 系列教程(三): 多页面解决方案--提取公共代码

相关文章
相关标签/搜索