前言
因为生活和工作方面原因,虽然有时还是在学习,但是开年后一直好久没有写文章了。简单地写点什么吧。
问题
通常我们在使用element-ui时都进行全局的加载,但是这会导致打出的包过大。所以为了减少包体积,我们进行按需加载。关于怎么实现按需加载,element-ui官方讲得很清楚,http://element-cn.eleme.io/2.3/#/zh-CN/component/quickstart。但是,并没有说怎么在nuxtjs中使用element-ui按需加载。(页面最后将了怎么使用nuxtjs使用element-ui,但是是全局加载)。
解决方案
- 尝试(一)
主要配置:
12345678910111213141516171819202122232425//babel部分{presets: [["es2015", {modules: false}],"stage-2"],plugins: ["transform-vue-jsx","transform-runtime",["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]]}//vendor部分vendor: ['axios', 'vue-lazyload', 'element-ui']//~plugins/element-ui.jsimport Vue from 'vue';import { Button } from 'element-ui'Vue.component(Button.name, Button)
打包后结果:
分析:
可以看出element-ui还是把全部都打包进去了,而不是按需加载了Button组件,这是为什么呢?
最终方案:
修改配置将vendor中的element-ui改为~plugins/element-ui:
修改后结果:
修改后分析:
可以看见已经实现了按需加载。那为什么配置为~plugins/element-ui
就能实现呢。其实,这和webpack
的tree-shaking
有关。当我们设置为element-ui
时,打包过程中webpack会对element-ui
进行tree-shaking处理。但是,element-ui默认会引用所有的组件,所以这时候tree-shaking并不会删减组件,起到按需加载的作用。但是当我们设置为~plugins/element-ui
时,因为该文件中只使用了Button组件,使用tree-shaking会删除其他没有使用的组件,起到按需加载的作用。
提示:
使用tree-shaking需要注意1. 配置modules: false
。2.压缩代码。 结束~~~