鉴于以下情况。
一个 webpack 构建生成 3 个包,一个 CI 将它们发布到这样的 CDN(每个构建 ID 生成一个新文件夹):
www.cdn.com/1/application.js
www.cdn.com/1/chunk-a.js
www.cdn.com/1/chunk-b.js
现在,考虑下一个构建产生:
www.cdn.com/2/application.js
www.cdn.com/2/chunk-a.js
www.cdn.com/2/chunk-b.js
其中一些文件可能是相同的,假设没有任何变化,但application.js
. 我们有一个生成清单的脚本,它只是比较这两个构建并生成:
{
files: [
'www.cdn.com/1/chunk-a.js',
'www.cdn.com/1/chunk-b.js',
'www.cdn.com/2/application.js'
]
}
我们想要挂钩到 webpack 块加载器策略并从构建中加载块1
,因为没有理由使任何客户端缓存无效。
更具体地说,我们希望对版本进行修补,以便我们可以在可能的情况下重用静态资产。
我们需要一个钩子来检索请求并返回一个 url,然后 webpack 将使用该 url 来加载资产,例如:
interface Hook {
(chunk: string): string
}
hook('chunk-a') => 'www.cdn.com/1/chunk-a.js'
hook('chunk-b') => 'www.cdn.com/1/chunk-b.js'
hook('application.js') => 'www.cdn.com/2/application.js'