webpack4 系列教程(三): 多页面解决方案--提取公共代码
2018-08-08 18:10
796 查看
这节课讲解
webpack4打包多页面应用过程中的提取公共代码部分。相比于
webpack3,
4.0版本用
optimization.splitChunks配置替换了
3.0版本的
CommonsChunkPlugin插件。在使用和配置上,更加方便和清晰。
>>> 本节课源码
>>> 所有课程源码
1. 准备工作
按照惯例,我们在src/文件夹下创建
pageA.js和
pageB.js分别作为两个入口文件。同时,这两个入口文件同时引用
subPageA.js和
subPageB.js,而
subPageA.js和
subPageB.js又同时引用
module.js文件。
代码目录结构如下图所示:
希望大家理清逻辑关系,下面从底层往上层进行代码书写。
module.js:
export default "module";
subPageA.js:
import "./module"; export default "subPageA";
subPageB.js:
import "./module"; export default "subPageB";
正如我们所见,
subPageA.js和
subPageB.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属性中。
其中,每个键对值就是被打包的一部分。例如代码中的
common和
vendor。值得注意的是,针对第三方库(例如
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,并且打开控制台即可。
相关文章推荐
- 详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
- webpack提取公共代码
- webpack4 系列教程(四): 单页面解决方案--代码分割和懒加载
- webpack4 系列教程(七): SCSS提取和懒加载
- 用webpack的CommonsChunkPlugin提取公共代码的3种方式
- webpack CommonsChunkPlugin 提取公共代码
- 基于webpack的前端工程化开发解决方案探索(二):代码分割与图片加载
- EasyDSS高性能流媒体服务器前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
- 深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
- Webpack 2 视频教程 017 - Webpack 2 中分离打包项目代码与组件代码
- [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法
- [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法
- Vue + Webpack + Vue-loader 系列教程
- webpack4 系列教程(十四):Clean Plugin and Watch Mode
- [js高手之路]深入浅出webpack教程系列4-插件使用之html-webpack-plugin配置(上)
- Webpack 2 视频教程 019 - Webpack 2 中配置多页面编译
- WebPack系列:Webpack编译的代码如何在tomcat中使用时静态资源路径不对的问题如何解决
- webpack4 系列教程(十五):开发模式与webpack-dev-server
- webpack4 系列教程(五): 处理CSS
- 工控仪表控件Iocomp ActiveX系列教程:将控件集成到Web页面