需求
在webpack
构建后,文件名称都会有一个hash
值,这个值的生成在webpack
的配置中有三种生成方式
hash, chunkhash,contenthash
。之前关注的一直是生成hash
相关的内容,如hash
和项目有关,chunkhash
和chunk
有关,contenthash
和CSS
提取有关。考虑到缓存,一般用chunkhash,contenthash
。
原因
从来没关注过不同环境同一份代码生成的hash
有什么不同。直到有个需求,同一份代码在不同环境构建,生成的hash要一样,然而构建后测试发现竟然是不一样的,好神奇,毕竟相同的内容都是通过md5
和hex
生成的hash
,然而搜索发现,生成hash
还会带上绝对路径的,也就是说同一份代码,同一环境不同路径最后生成的hash
都是不一样的,更不要说不同系统了。
低级解决办法
想要生成一样的hash
可以用同一个构建环境,但是有时候并没有统一的构建环境,又要一样的hash。webpack
提供了接口(v3
没有,v4
以上才有),自己提供算法 output.hasFunction
函数返回一个对象,包含两个函数。
update
函数的参数的文件内容
digest
函数返回的内容即是替换[chunkhash]
占位符的内容,注意这里如果返回的是一个固定值,那么每个文件的hash是一样的。
1 | output: { |
高级解决办法
怎么能每个chunk
根据自己的内容生成 chunkhash
???
参考