webpack打包缓存_webpack打包之 缓存

为了有效的缓存你的文件,需要给文件URL添加hash或者版本号。你可以手动的把文件都放进一个带版本如v1.3的文件夹里面。但是这样做会有很多的缺陷:增加额外的工作,没有更改的文件也不能从缓存里面取之。

使用webpack可以给filename上加伤hash,有些输出file的加载器已经支持(work-loader,file-loader).对于chunks你还需要让他能够支持,两种级别:从所有的chunks中计算出一个hash值

从每一个chunk中计算一个hash值

第一种:一个给bundle的hash

添加 [hash] 给filename

config options:

webpack ./entry output.[hash].bundle.js

{

output: {

path: path.join(__dirname, "assets", "[hash]"),

publicPath: "assets/[hash]/",

filename: "output.[hash].bundle.js",

chunkFilename: "[id].[hash].bundle.js"

}

}

第二种: 每个chunk一个hash

添加 [chunkhash] 给 chunk filename

config option

--output-chunk-file [chunkhash].js

output: { chunkFilename: "[chunkhash].bundle.js" }

注意:如果你想在HTML中使用entry chunk的hash,你可能需要从stats中分离出相应文件的hash 或者filename。

如果是和热替换结合,你需要使用第一种类型但不能带publicPath配置选项

从stats中得到 filenames

想要把从asset中得到的最终的filenames嵌入到HTML中,这些信息在webpack的stats 中是可以看到的。如果你使用CLI,运行脚本带上--json来得到stats的json文件

你也可以添加一个assets-webpack-plugin 的插件到wepack配置当中来让你得到stats对象。

或者自己写插件来得到它,例子:

plugins: [

function() {

this.plugin("done", function(stats) {

require("fs").writeFileSync(

path.join(__dirname, "...", "stats.json"),

JSON.stringify(stats.toJson()));

});

}

]

stats JSON包含了一个有用的属性assetsByChunkName 包含了一个以chunk name作为key,filename作为值的对象tips: 如果每个chunk都输出了多个asset那么filename会是一个数组. 比如一个chunk 你可能既输出js也输出sourceMap文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值