基于webpack实现多html页面开发框架六 提取公共代码

一、解决什么问题

  1、如果a.js和b.js都引用了common.js,那在打包的时候common.js会被重复打入到a.js和b.js,造成重复打包

  2、单独打包common.js对性能有帮助,浏览器下载一次后会缓存下来,不会重复下载

二、未抽取公共代码的状况

  基于之前代码,测试如下:  

  1、在assets/js文件夹下新建common.js,输入如下代码:

1 export function printCommon(){
2     console.log("common");
3 }

  2、在src/index文件夹下的index.js引入common.js,调用printCommon

  3、在src/home文件夹下的index.js引入common.js,调用printCommon

  4、测试结果如下:

  

  很明显common.js分别打包到了home.js和index.js,造成了重复打包,且不能利用浏览器缓存的优点

三、抽取公共代码后的状况

  1、需要用到的插件SplitChunksPlugin,个人理解该插件主要是解决重复引用的问题,官网详细介绍https://webpack.js.org/plugins/split-chunks-plugin/

     详细描述一个配置属性chunks:拆分模块的范围它有三个值async、initial和all

    async表示只从异步加载得模块(动态加载import())里面进行拆分

    initial表示只从入口模块进行拆分

    all表示以上两者都包括

  2、如何配置splitChunks,如下:

 1  // 提取公共代码
 2     optimization: {
 3         splitChunks: {
 4             cacheGroups: {
 5                 vendor: {   // 抽离第三方插件
 6                     test: /node_modules/,   // 指定是node_modules下的第三方包
 7                     chunks: ‘initial‘, // 拆分模块的范围
 8                     name: ‘vendor‘,  // 打包后的文件名,任意命名
 9                     // 设置优先级,防止和自定义的公共代码提取时被覆盖,不进行打包
10                     priority: 10
11                 },
12                 utils: { // 抽离自己写的公共代码,common这个名字可以随意起
13                     chunks: ‘initial‘,
14                     name: ‘common‘,  // 任意命名
15                     minSize: 0,    // 只要超出0字节就生成一个新包
16                     minChunks: 2   //
17                 }
18             }
19         }
20     },

  3、配置完重新运行npm run dev 效果如下:

  头部引用超过两次的公共代码进行了单独打包,common.js和vendor.js

  

  再次打开home页面,看common.js和vendor.js是否重新下载,状态为304,引用的缓存

  

  

  源码地址:https://github.com/James-14/webpack4_multi_page_demo

  写的不对之处请大家批评指正~~~~!!!!!!

  文章原创,转载请注明出处,谢谢!

    

原文地址:https://www.cnblogs.com/lisong/p/12015791.html

时间: 2024-07-30 14:42:02

基于webpack实现多html页面开发框架六 提取公共代码的相关文章

The way of Webpack learning (II.) -- Extract common code(多页面提取公共代码)

学习之路基于webpack3.10.0,webpack4.0之后更新. 多页面提取公共代码!!! 一:文件关系 pageA --> subA.subB --> moduleA pageB --> subA.subB --> moduleA 那么pageA.pageB 的公共代码就是subA.subB .moduleA. 二:webpack.config.js文件配置 var webpack = require('webpack') var path = require('path'

webpack提取公共代码。

webpack.optimize.CommonsChunkPlugin这个是内置方法到时候new就行了. 首先创 var webpack=require('webpack') var path=require('path') module.exports={ entry:{ 'pageA':'./src/pageA', 'pageB':'./src/pageB', 'vendor':['lodash'] }, output:{ path:path.resolve(__dirname, './di

webpack配置提取公共代码

公共代码提取功能是针对多入口文件的: 背景:在pageA.js和pageB.js中分别引用subPageA.js和subPageB.js webpack.config.js文件: 1 var path = require('path') 2 module.exports = { 3 entry:{ 4 pageA:'./src/pageA.js', 5 pageB:'./src/pageB.js' 6 }, 7 output: { 8 filename: "[name].js", 9

webpack入坑之旅(六)配合vue-router实现SPA

这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不是开始的开始 webpack入坑之旅(二)loader入门 webpack入坑之旅(三)webpack.config入门 webpack入坑之旅(四)扬帆起航 webpack入坑之旅(五)加载vue单文件组件 webpack入坑之旅(六)配合vue-router实现SPA 在上面的练习当中我们已经成

基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://gith

webpack+react+antd 单页面应用实例

webpack+react+antd 单页面应用实例 React框架已经火了好长一段时间了,再不学就out了! 对React还没有了解的同学可以看看我之前的一篇文章,可以快速简单的认识一下React.React入门最好的实例-TodoList 自己从开始接触react一窍不通,到慢慢的似懂非懂,通过各种途径学习也有一阵了.学习过程中还会接触到很多新的东西,比如ES6.webpack,过程艰辛谁人懂,见坑填坑慢慢来.今天把学习过程过滤了一下,只说项目实际需要用的东西,总结了一套能看到的东西,分享给

基于DDD的现代ASP.NET开发框架--ABP系列之3、ABP分层架构

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 前言 为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术.为了实现分层的体系结

基于webpack搭建vue-cli以及webstorm的设置

N1.检查本地电脑是否安装node和npm 安装vue-cli的前提是已经安装了npm 是否安装npm检查命令 npm -v 如果出现版本号,说明已经安装了npm 查看node版本号 node -v 如果未出现上述情况,请前往官网下载稳定版本,也可以点右边的穿梭机下载,目前vision用的node版本是 8.9.3 走你--node下载 注意:可以直接在官网上下载8.9.3版本覆盖你本地的版本,安装之后运行npm -v可能会出现如下错误. 解决方法: 删除目录下"C:\Users\你的用户名\A

基于 Webpack 4 和 React hooks 搭建项目

面对日新月异的前端,我表示快学不动了??. Webpack 老早就已经更新到了 V4.x,前段时间 React 又推出了 hooks API.刚好春节在家里休假,时间比较空闲,还是赶紧把 React 技术栈这块补上. 网上有很多介绍 hooks 知识点的文章,但都比较零碎,基本只能写一些小 Demo .还没有比较系统的,全新的基于 hooks 进行搭建实际项目的讲解.所以这里就从开发实际项目的角度,搭建起单页面 Web App 项目的基本脚手架,并基于 hooks API 实现一个 react