webpack4.0 缓存

webpack 中文官网还没有更新,webpack.optimize.CommonsChunkPlugin已经不再用。更换为config.optimization.splitChunks。

关于几点概念,自己的理解。
在这里插入图片描述
manifest: wepack 解析 import export ,转换为 __webpack_require__方法
Runtime: runtime会根据 manifest检索出背后对应的模块,这里面还包括在模块交互时,连接模块所需的加载和解析逻辑。包括浏览器中的已加载模块的连接,以及懒加载模块的执行逻辑。
vendors:你的源码会依赖的任何第三方的 library 或 “vendor” 代码。也就是第三方库文件。
当配置如下时,会打包一个 js 文件。
webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
const webpack = require('webpack')
module.exports = {
    entry: {
        app: './src/index.js',
        // print: './src/print.js'
    },
    output: {
        filename: '[name].[contenthash].js',
        path: path.resolve(__dirname, 'dist')
    },

    plugins: [
        
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            title: 'Output Management'
        })
    ]
}

而缓存这一节,主要是从打包一个 js 文件里提取出Runtime,以及vendors。因为一般更改的主要的逻辑代码,这两部分更改的不多,特别是vendors。这样做可以使浏览器加载速度更快,不再重新下载未改过的文件。

在配置文件里增加两个东西:
1、optimization.runtimeChunk,这个可以做到把runtime,vendors 提取出来,做到代码分离。
2、webpack.HashedModuleIdsPlugin插件,使用这个插件可以使,vendor的 hash 值不变。

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
const webpack = require('webpack')
module.exports = {
    entry: {
        app: './src/index.js',
        // print: './src/print.js'
    },
    output: {
        filename: '[name].[contenthash].js',
        path: path.resolve(__dirname, 'dist')
    },
  +  optimization: {
    +    runtimeChunk: 'single',
      +   splitChunks: {
        +   cacheGroups: {
          +       vendor: {
            +           test: /[\\/]node_modules[\\/]/,
              +             name: 'vendors',
                +           chunks: 'all'
                  +   }
               +}
         +}
    +},
    plugins: [
      +  new webpack.HashedModuleIdsPlugin(),
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            title: 'Output Management'
        })
    ]
}

运行命令npm run build,查看结果。

Built at: 08/15/2019 11:33:37 AM
                          Asset       Size  Chunks             Chunk Names
    app.26d4bfd00f0dc1834ba9.js  450 bytes       0  [emitted]  app
                     index.html  362 bytes          [emitted]  
runtime.3964ebb6f53a392eb988.js   1.46 KiB       1  [emitted]  runtime
vendors.fe5b987e58f49faa402a.js   69.7 KiB       2  [emitted]  vendors

修改 src 目录下,index.js、或者 print.js 的逻辑。再次运行 build,发现只有app.26d4bfd00f0dc1834ba9.js 的 hash 变了,另外两个runtime.3964ebb6f53a392eb988.js、vendors.fe5b987e58f49faa402a.js 的 hash 值没有变化。

例子链接:/缓存/demo16/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小~小

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值