开发基于Element UI的Vue扩展组件,在组件中使用了lodash库来处理集合对象,使用moment库来处理日期对象。只实现了几个组件,发布出来的npm包却有1M+,查看发布后的js文件,发现vue cli将lodash和moment的代码打包编译到了组件js文件中。
于是就想到了优化一下组件。
优化lodash
首先想到的就是不使用lodash库,将使用lodash实现的逻辑部分使用原生的JavaScript替换,然后再发布发现组件已经减小了很多。
移除lodash后
优化moment
对于moment库,它本身含有很多的locale文件,用来支持其国际化功能。moment库对与项目来将还是比较大的。对于moment的优化,就使用另外一种的优化手段:使用外部moment。
再vue.config.js中配置:
configureWebpack: {
externals: {
moment: 'moment'
}
}
告诉Vue CLI对用moment库,我们使用外部的,不需要打包进组件。仅仅告诉了Vue CLI,还要再index.html中增加moment相关的引用:
<script src="https://cdn.bootcss.com/moment.js/2.24.0/moment.min.js"></script>
配置完成后,我们再次编译:
可以看到优化的效果还是非常明显的,直接优化掉了80%+的包大小。