我们平时可能这样引入注册组件。每次都得需要在头部引入,然后注册,最后在模板上使用。

    1. <template>
    2. <div id="app">
    3. <comp-one></comp-one>
    4. </div>
    5. </template>
    6. <script>
    7. import compOne from './components/comp-one.vue'
    8. export default {
    9. name: 'App',
    10. components: {
    11. compOne
    12. }
    13. }
    14. </script>

    那么,有没有更加方便快捷的方法呢?我们不妨这样。
    创建一个名为 globalComp.js 文件,假设我们这里与组件平级,即存放在组件文件夹中。
    目录结构如:

    1. -src
    2. --components
    3. ---comp-one.vue
    4. ---globalComp.js

    globalComp.js

    1. import Vue from 'vue'
    2. function changeStr (str){
    3. return str.charAt(0).toUpperCase() + str.slice(1);
    4. }
    5. const requireComponent = require.context('./',false,/\.vue$/); // './'操作对象为当前目录
    6. requireComponent.keys().forEach(element => {
    7. const config = requireComponent(element);
    8. const componentName = changeStr(
    9. element.replace(/^\.\//,'').replace(/\.\w+$/,'')
    10. )
    11. Vue.component(componentName, config.default || config)
    12. });

    然后,我们需要在 main.js 文件中引入。

    1. import './components/globalComp.js'

    最后,我们只需要在模板直接使用就可以了。

    1. <template>
    2. <div id="app">
    3. <comp-one />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: 'App'
    9. }
    10. </script>

    注意,require.context 是 webpack 的一个 API,所以,需要基于 webpack 环境才可以使用。