element.ui官网文档给出的按需引入组件的说明,属于是在main.js中为Vue注册全局组件的方式,
某页面即使不使用某组件也会在打包代码中包含它,如果希望某个组件仅仅在单独页面里按需引入,则可以使用本文方法。

官方方法

官方方法分两步:
(1)安装babel-plugin-component,修改“.babelrc”文件内容;(经验证此步骤不再需要,环境:webpack-4.18.0、vue-2.5.17,由于webpack2之后import原生支持ES6所以未使用babel)
(2)在 main.js 中单独import组件并注册为全局组件,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/****************main.js******************/
import Vue from 'vue';
import { Button, Select } from 'element-ui';
import App from './App.vue';

Vue.component(Button.name, Button);
Vue.component(Select.name, Select);
/* 或写为
* Vue.use(Button)
* Vue.use(Select)
*/

new Vue({
el: '#app',
render: h => h(App)
});

真正按需引入的方法

思路就是把引用和注册组件的操作转在vue页面内进行,以局部注册Button为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/****************onePage.vue******************/
<template>
<div class="container">
<el-button>默认按钮</el-button>
</div>
</template>

<script type="text/ecmascript-6">
import { Button } from 'element-ui';
export default{
data(){
return {
//balaba
};
},
components:{
ElButton: Button
}
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
</style>

注意components那里不要简写成“Button”,因为组件名字是“ElButton”而不是同名的“Button”所以不能简写。
这里的“ElButton”其实就是官网方法中的“Button.name”的值,我是通过调试知道的。
目前用过的组件name都是前面加上“El”前缀,如果某个组件注册失败则需要调试或element-ui源码中查找其真实的name值。
或者使用如下通用但不美观的写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/ecmascript-6">
import { Button } from 'element-ui';
let exportObj = {
data(){
return {
//balaba
};
}
};
exportObj.components = {};
exportObj.components[Button.name] = Button;

export default exportObj;
</script>