目标是在多个应用程序之间共享和缓存Webpack块。
场景:
import
创建和使用块: import(/* webpackChunkName: "AAA" */ './AAA').then((AAA) => {
[…]
});
customImport('/path/on/server/to/AAA.7adf75a1.chunk.js').then((AAA) => {
[…]
});
想法
通常,通过chunkId
中的requireEnsure
函数使用webpack/bootstrap
s加载块。
为了重用大多数Web Pack逻辑,我的想法是通过创建id
替换来直接将源路径用作customRequireEnsure
:
script.src = __webpack_require__.p + "static/js/" + ({"0":"AAA","1":"BBB"}[chunkId]||chunkId) + "." + {"0":"7adf75a1","1":"cb8dc745"}[chunkId] + ".chunk.js";
具有:
script.src = chunkId;
问题
这样,脚本插入可以正常工作。新的脚本标签以正确的src
出现在文档的头部。但是,由于installedChunks[chunkId]
为空,JSONP回调似乎无法正确触发。这导致new Error('Loading chunk ' + chunkId + ' failed.')
。我假设还必须采用window["webpackJsonp"]
回调才能使用“新” chunkId。
问题
注意
两个应用程序都在代理服务器后面的同一服务器上运行,例如:
http://domain/app1
http://domain/app2
“缓存”是指本机的“浏览器缓存”。