Skip to content

#tech/vue/build优化

优化之前 main-bundle 达到29MB

优化过程

猜测主要占用大小的是

  • echart
  • bpmn
  • aggrid
  • monaco-editor
  • it-markdown

原始组件改写

yv-src-editor.vue 改写至 yv-src-editor-inner.vue

js
import {defineAsyncComponent} from 'vue'  
  
// 异步加载 yv-src-editor-inner.vue 组件  
const Inner = defineAsyncComponent(() => import('./yv-src-editor-inner.vue'))  
export default Inner

引用组件改写

原来写法

js
import {AgGridVue} from "ag-grid-vue3";

Vue.component('ag-grid-vue', AgGridVue)

改写成

js
import {defineAsyncComponent} from 'vue'

Vue.component('ag-grid-vue', defineAsyncComponent(() => {  
    return Promise.all([  
        import('ag-grid-vue3'),  
        import ('../../ag_grid_license')  
    ]).then(([module, license]) => {  
        return module.AgGridVue  
    })  
}))

定义组件改写

js
import YvVjsonFlowgraph from './yv-vjson-flowgraph.vue'
import YvDesignFlowgraph from './yv-design-flowgraph.vue'
import YvDesignFlowgraphProp from './yv-design-flowgraph-prop.vue'

install(Vue) {
	Vue.component('YvVjsonFlowgraph', YvVjsonFlowgraph)
	Vue.component('YvDesignFlowgraph', YvDesignFlowgraph)
	Vue.component('YvDesignFlowgraphProp', YvDesignFlowgraphProp)
}

改写为

js
install(Vue) {  
    Vue.component('YvVjsonFlowgraph', defineAsyncComponent(() => import('./yv-vjson-flowgraph.vue')))  
    Vue.component('YvDesignFlowgraph', defineAsyncComponent(() => import('./yv-design-flowgraph.vue')))  
    Vue.component('YvDesignFlowgraphProp', defineAsyncComponent(() => import('./yv-design-flowgraph-prop.vue')))  
},

优化成果

main-bundle 源码构成

组件开始行结束行总行数
lodash3237073675
@vue/shared37073864157
@vue/reactivity38654664799
@vue/runtime-core466598015136
@vue/runtime-dom9801108071006
vue10808200599251
@vue/shared20060268836823
@vue/reactivity26884353308446
element-ui3533110251067179
pinia+业务代码102511253323150812
Sortable+业务代码25332430958956265
vue-router3095893133633774

最终 main 主包体 12MB