webpack4 自学笔记三(提取公用代码)

摘要:
全部的代码及笔记都可以在我的github上查看,欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/commonThunk1.提取公用代码的作用:减少代码的冗余提高用户的加载速度单页面减少下载,多页面可以使用缓存2.webpack3.0中的commonsChunkPlugin插件webpack的内置插件webpac
全部的代码及笔记都可以在我的github上查看, 欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/commonThunk
1. 提取公用代码的作用:
减少代码的冗余
提高用户的加载速度
单页面减少下载,多页面可以使用缓存

2. webpack3.0 中的 commonsChunkPlugin 插件
webpack的内置插件 webpack.optimize.CommonsChunkPlugin
配置项:
options.name / options.names thunk的名称
options.filename 打包后的文件名称
options.minChunks 公用的次数(多少次会被提取): 可以是数字、函数和
options.chunks 指定提取代码的范围
options.children
options.deepChildren 是否在子模块看中继续提取公用代码
options.async 创建一个异步的公共代码块

3. 不同场景的配置
单页应用:

多页应用:

多页应用+第三方依赖+webpack生成代码

4. 安装环境
npm install webpack --save-dev

5. webpack4.0 webpack4 最大的改动就是废除了CommonsChunkPlugin 引入了 optimization.splitChunks

如果你再webpack4中使用了weppack3的CommonsChunkPlugin 会出现以下报错: (运行配置文件 webpack3.config.js)

Error: webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunks

webpack3.config.js:
var webpack = require('webpack')
var path = require('path')
module.exports = {
    mode: 'development',
    entry: {
        'pageA': './src/pageA'
    },
    output: {
        path: path.resolve(__dirname, './dist'),
        filename: '[name].bundle.js',
        chunkFilename: '[name].chunk.js'
    },
    plugins: [
        new webpack.optimize.CommonsChunkPlugin({
            name: 'common',
            minChunk: 2
        })
    ],
    devtool: 'source-map',
}
webpack4 配置更加简单,如果设置了 mode 为 production,那么webpack4 会自动开启 Code Splitting

6. webpack4内置的代码分割策略
a. 新的chunk是否被共享或者来自node_module的模块
b. 新的chunk体积在压缩之前是否大于30kb
c. 按需加载chunk的并发请求数量小于等于5个
d. 页面初始加载时的并发请求数量小于等于3个

7. 合理使用 Code Splitting
a. 基础类库 chunk-libs : 比如 vue + vuex + vue-router + axios 这类的全家桶,一旦立项升级频率不高,但是每个文件基本都需要依赖

b. UI组件库 chunk-common : 比如 element-ui 升级频率也不会高,单独打包原因是体积比较大

c. 低频组件 : 比如一些特定页面需要使用的第三方库文件--富文本编辑器等

d. 公用业务代码 : 比如vue的路由懒加载 component: () => import('./xxx.vue') webpack默认会将其打包成一个独立的bundle

针对如上需求可进行如下配置:
splitChunks: {
  chunks: "all",
  cacheGroups: {
    libs: {
      name: "chunk-libs",
      test: /[/]node_modules[/]/,
      priority: 10,
      chunks: "initial" // 只打包初始时依赖的第三方
    },
    elementUI: {
      name: "chunk-elementUI", // 单独将 elementUI 拆包
      priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
      test: /[/]node_modules[/]element-ui[/]/
    },
    commons: {
      name: "chunk-comomns",
      test: resolve("src/components"), // 可自定义拓展你的规则
      minChunks: 2, // 最小共用次数
      priority: 5,
      reuseExistingChunk: true
    }
  }
};

免责声明:文章转载自《webpack4 自学笔记三(提取公用代码)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于使用“JS获取屏幕,浏览器,网页高度宽度”的个人思考 F事务处理接口分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

webpack使用的心得

1 . 我们需要使用打包工具,首先第一步就得 执行 npm install进行安装,可是很多时候 加载速度很慢,这个时候我们可以 用淘宝镜像源,参考地址: https://npm.taobao.org/ 使用方法如下: npm install --registry=https://registry.npm.taobao.org 全局配置镜像源: 淘宝镜像:...

完全方案:超详细的webpack4配置(webpack3与webpack4的差异)

webpack4的发布已经有一段时间了,听说webpack4的发布是注意到了他的亮点:实现零配置。webpack4制定了入口和出口的位置,但是实现页面应用和需要具体的功能的是时候还是避免不了进行配置一些选项。而且webpack的难点和精髓也在配置里面。webpack3对比webpack4传送门https://www.cnblogs.com/wyliunan...

webpack学习笔记--按需加载

为什么需要按需加载 随着互联网的发展,一个网页需要承载的功能越来越多。 对于采用单页应用作为前端架构的网站来说,会面临着一个网页需要加载的代码量很大的问题,因为许多功能都集中的做到了一个 HTML 里。 这会导致网页加载缓慢、交互卡顿,用户体验将非常糟糕。 导致这个问题的根本原因在于一次性的加载所有功能对应的代码,但其实用户每一阶段只可能使用其中一部分功...

Vue全家桶系列【vue3更新中.....】

一. 简介  1. 说明   Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。 V...

webpack4.x 从零开始配置vue 项目(一)基础搭建项目

序 现在依旧记得第一次看到webpack3.x 版本配置时候的状态刚开始看到这些真的是一脸懵。希望这篇文章能帮到刚开始入门的同学。 webpack 是什么? webpack是一个模块化打包工具,webpack 通过入口分析项目结构,找到JavaScript模块以及一些不能直接在浏览器上运行的语言、语法等 如(scss、ts、es6+等),并将其打包成可以直...

webpack打包(1)

webpack能处理js/json资源,生成环境比开发环境多了压缩代码的功能   将es6模块化变为浏览器能识别的模块    操作命令       npm i webpack webpack-cli -g        npm init          npm i webpack-cli -D         在webpack.config.js中配置好...