modulePreloadPolyfillPlugin
2023年12月28日
一、认识
由于部分支持原生 ESM
的浏览器并不支持 module preload
,因此某些情况下需要注入相应的 polyfill
进行降级。当你在 Vite
配置文件中开启下面这个配置时:
{
build: {
polyfillModulePreload: true
}
}
Vite
会自动应用 modulePreloadPolyfillPlugin
插件,在产物中注入 module preload
的 Polyfill
代码。具体实现 摘自之前我们提到过的 es-module-shims
这个库,实现原理如下:
-
扫描出当前所有的
modulepreload
标签,拿到link
标签对应的地址,通过执行fetch
实现预加载 -
同时通过
MutationObserver
监听DOM
的变化,一旦发现包含modulepreload
属性的link
标签,则同样通过fetch
请求实现预加载