可能你的许多组件只是包裹了一个输入框或按钮之类的元素,是绝对通用的。咱们有时候会把它们称为根底组件,它们会在各个组件中被频繁的用到。
所以会导致很多组件里都会有一个蕴含根底组件的长列表:
import BaseButton from './BaseButton.vue'import BaseIcon from './BaseIcon.vue'import BaseInput from './BaseInput.vue'export default { components: { BaseButton, BaseIcon, BaseInput }}
而只是用于模板中的一小部分:
<BaseInput v-model="searchText" @keydown.enter="search"/><BaseButton @click="search"> <BaseIcon name="search"/></BaseButton>
如果你恰好应用了 webpack (或在外部应用了 webpack 的 Vue CLI 3+),那么就能够应用 require.context 只全局注册这些十分通用的根底组件。这里有一份能够让你在利用入口文件 (比方 src/main.js) 中全局导入根底组件的示例代码:
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 )})
记住全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创立之前产生。