避免 Vue CLI 3 多页时引入不需要的代码

2019-02-16 14:35 #旧文章

不想听故事的直接看下面有标题的,嘻嘻

起因是这样的,前几天我把这个网站用 Vue CLI 3 重构了,前台应该没有用到其他插件,后台用了 Vuetify。执行构建以后发现前台页面的代码大小有警告,那时候我也没怎么在意。

有一天我在梦到(别是梦游审代码吧)我把后台的 Vuetify 引入到了前台所以构建出来才这么大。然后我看了一眼网络瀑布,这个 chunk-vendors.c23e18a8.js 是什么鬼哦,这么大,还有 chunk-vendors.7c3d5013.css

Chrome Dev tools Network tab
Chrome Dev tools Network tab

然后我点开 chunk-vendors.7c3d5013.css 看了一眼,向下拉了几行

chunk-vendors.7c3d5013.css
chunk-vendors.7c3d5013.css

Vuetify?! 我记得前台代码上面没有引入 Vuetify 啊,重新查了一遍代码,确实没有引入。这就奇了怪了,怎么在后台引用的东西前台也有了。查了两天资料不知道是什么情况。尽早突然意识到 chunk-vendors.c23e18a8.jschunk-vendors.7c3d5013.css 都同时被前台和后台引用了。这下我大概明白是什么情况了。

原因

Vue CLI 3 会将用到的 node_modules 打包进 chunk-vendors 里,这样可以让浏览器更好的使用缓存,两个页面使用同一套 chunk-vendors 就只需要从服务器获取一次代码。但是因为一些原因,比如我这前台根本用不着后台用的 Vuetify,就会希望 Vue CLI 3 把两个页面使用的 node_modules 拆开成多个文件,两个页面分别加载自己需要的代码。

解决方法

vue.config.js 中的 module.exports 中加入如下代码

chainWebpack: config => {
config.optimization.delete('splitChunks')
},

这样就可以阻止 Vue CLI 3 生成 chunk-vendors 块。

效果很明显,下面时禁用 splitChunks 前的构建信息

禁用splitChunks前
禁用 splitChunks 前

禁用后的构建信息

禁用splitChunks后
禁用 splitChunks 后

可以发现 index 部分的代码大小减少了差不多一半。

这个方案可能会有副作用,我再继续研究研究。

参考资料