component — 基础组件全局注册
最后更新于:2022-04-02 08:07:43
>[success] # 文档中的好案例
[基础组件全局注册](https://cn.vuejs.org/v2/guide/components-registration.html)
>[info] ## 注册全局组价
~~~
1.使用的情况,有时候我们会把相对通用的封装成基础组件,在各个组件频繁使用,这时候一般
我们解决方法就是用到的地方在当前页导入,或者是在main.js 入口写所有需要全局使用的组件
每一个import 导入
2.这里要说的现在工作用到的真实场景,我们项目会通过动态去配置一些表单,和一些页面,
这些动态配置的组件都是基于ele组件更改,或者是高于单一组件让其具备联动逻辑,大概
这类基础组件就有20+,因此我们不能每次都做到增加新的组价就去main.js 添加,总有遗忘
的时候这时候就是'动态注册组件'最好的应用场景
~~~
* 不用动态组成,自己注册形成的噩梦文件
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d8/1f/d81ffc9e80c9987b386f5a2d3c6cf32f_309x388.png)
>[danger] ##### require.context
[文章首发地址来源](https://blog.wbjiang.cn/article/169)
[一篇文章读懂](https://segmentfault.com/a/1190000019723837)
[官网对api的解释](https://webpack.js.org/guides/dependency-management/#requirecontext)
* 文章中的图片说明
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6a/46/6a461b3c9d4a00912af7de6c406301ae_1351x730.png)
>[danger] ##### 来编写一个动态注册的脚本
~~~
const requireContext = require.context("./components/", false, /\.vue$/);
const components = requireContext.keys().reduce((acc, key) => {
const component = requireContext(key).default;
acc[component.name] = component;
return acc;
}, {});
// 直接在根目录注册 也就是一般大家定义的App.vue 文件
export default {
name: "app",
components,
};
~~~
>[danger] ##### 利用vue.component 来注册
~~~
1.首先vue.component 本身就可以注册全局组件,想vue 官网给出这种方案
~~~
~~~
import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
const requireComponent = require.context(
// 其组件目录的相对路径
'./components',
// 是否查询其子目录
false,
// 匹配基础组件文件名的正则表达式
/Base[A-Z]\w+\.(vue|js)$/
)
requireComponent.keys().forEach(fileName => {
// 获取组件配置
const componentConfig = requireComponent(fileName)
// 获取组件的 PascalCase 命名
const componentName = upperFirst(
camelCase(
// 获取和目录深度无关的文件名
fileName
.split('/')
.pop()
.replace(/\.\w+$/, '')
)
)
// 全局注册组件
Vue.component(
componentName,
// 如果这个组件选项是通过 `export default` 导出的,
// 那么就会优先使用 `.default`,
// 否则回退到使用模块的根。
componentConfig.default || componentConfig
)
})
~~~
>[danger] ##### 当然你想让自动引入更健硕
[可以使用vue文档中给的案例](https://github.com/chrisvfritz/vue-enterprise-boilerplate/blob/master/src/components/_globals.js)
';