学习require.context注册vue组件总结

1,189 阅读2分钟

What

require.context是什么?

  • 这是 webpack 里面用于管理依赖dependency-management,用来自动导入模块(组件、图片等,这里用组件来举例)

使用目的

当前组件的数量少,可以使用 Vue.component()(如何注册插件) 逐个去注册,但是数量多的话就成了比较繁琐的事情了。

所以这就是 webpack 的 require.context 用武之处,批量注册组件。

实例演示

封装了两个组件,想将它们注册为vue全局组件。

封装组件目录

封装组件目录

组件的内容:

  • Button组件

  • Scroll组件

工具函数

封装了vue全局注册组件的函数 (文件名应该是utils,出错了...)

export default {
  // install函数接收两个参数,第一个为 Vue构造器,第二个为可选的选项对象options
  install(Vue) {
    // webpack的一个函数,返回模块上下文函数,接收三个参数:搜索文件目录,是否搜索其子目录,匹配文件名的正则表达式
    const requireComponents = require.context('../packages', true, /\.vue$/)
    console.log(requireComponents)
    console.log(requireComponents.keys())
    
    // keys() 方法,它返回上下文模块可以处理的所有可能请求的数组
    requireComponents.keys().forEach(name => {
      // 我的理解为进一步解析当前文件里的内容
      const componentConfig = requireComponents(name)
      console.log(componentConfig)
      
      // 提取组件名
      const componentName = componentConfig.default.name
      console.log(componentName)
      
      // 注册组件
      if (componentName) {
        Vue.component(componentName, componentConfig.default || componentConfig)
      }
    })
  }
}
  1. console.log(requireComponents) 打印结果

打印结果为一个函数,并且返回一个 webpackContext 方法,并且有三个属性,resolve方法, keys方法,id 属性。

其中 keys 方法返回的是 map 集合的键名(Object.keys 方法)

  1. console.log(requireComponents.keys())

打印结果为一个数组,其值为组件文件的相对地址

  1. console.log(componentConfig)console.log(componentName)

获得组件名后便可注册组件。

Vue.component(componentName, componentConfig.default || componentConfig)

使用组件

在入口文件直接导入 global.js 文件,再通过 Vue.use(global) 使用插件,这样就可以直接在组件中使用了。

import global from '@/untils/global'
// 使用自己封装的插件
Vue.use(global)

总结

require.context 用法就是 遍历目录文件,获取组件名通过循环实现组件全局注册。

参考文章: