猿问

webpack CommonsChunkPlugin和code-splitting

vue全家桶webpack工程中,我使用了CommonsChunkPlugin,chunkhash做文件静态缓存。 vendor.js 文件是vue,vuex,vue-router,element-ui 第三方库。

vue路由做了代码分割,按需加载

https://img.mukewang.com/5c4ab8d30001c58607700084.jpg

生成的路由文件是这样,文件名+hash.js。没问题。

https://img3.mukewang.com/5c4ab8e100015a0b03160188.jpg

问题在于打包生成的vendor.js文件有这么一段代码:

https://img3.mukewang.com/5c4ab8ef0001b97d08000137.jpg

没错,vendor文件存放着代码分割后的小文件名,问题在于

  • 如果重新打包之后,旧文件会被清除,修改的文件的hash值改变,vendor中的分割的路由组件名也会改变,用户浏览器中还缓存着vendor的老文件,根据老的vendor文件来按需加载路由组件,就会找不到原来的路由组件。报错,需要用户清除缓存,重新加载新的 vendor.js 文件,才能访问到更改过的路由组件。

  • CommonsChunkPlugin的本意不是抽离第三方组件,所有路由组件通用,不需重复加载么?为什么同时使用 CommonsChunkPlugin和code-splitting,chunkhash,会每次打包vendor内容都会改变?

想要的效果:
每次打包生成的vendor.js保持不变,修改过的路由组件hash值变化,用户每次访问最新的代码。

PS: 问题描述可能不是很详细,有什么需要我补充请随便提出来,谢谢。


一只名叫tom的猫
浏览 422回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答