批量自动化注册全局组件(Vue3)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批量自动化注册全局组件(Vue3)相关的知识,希望对你有一定的参考价值。

参考技术A 已知 注册全局组件 有两种方法:

一种是直接去 main.js 中引入文件,通过 vue.component('组件名',组件对象),导入定义的变量名就是组件对象,组件名是组件的name

第二种是将要全局注册的全部组件文件导入到同一个index.js文件中,通过 install 函数进行分别注册,之后将这个 index.js文 件导入到 main.js 文件中,通过 vue.use 挂载到全局,之后如果又有新的全局组件需要注册,直接引入到 index.js 文件中即可

①使用 require 提供的函数 context 加载 某一个目录下 的所有 .vue 后缀 的文件。

②然后 context 函数会返回一个导入函数 importFn,它又一个属性 keys() 获取所有的文件路径

③通过 遍历 文件路径数组 , 使用 importFn 根据路径导入组件对象

批量自动化注册组件:app是vue3中install函数的参数,以下内容就是写在install函数中

需要注意的是,这里注册完成一样是需要将文件导入到main.js文件中,通过Vue.use进行全局挂载

原理就是:当你在mian.js导入,使用Vue.use() (vue3.0 app)的时候就会执行install函数

Vue自动化注册全局组件脚本

今天有一个idea,vue一些组件,可能会全局都用到,我觉得在main.js写

Vue.component(name, instance)

然后很命令式,写着也不好看,想着能够有一个函数可以指定加载比如components下的文件,自动完成全局化注册,想起来就很帅

放代码:

export function autoLoadingGlobalComponent() {
  const requireComponent = require.context(
    // 其组件目录的相对路径
    ‘../components‘,
    // 是否查询其子目录
    false,
    // 匹配vue后缀文件名的文件
    /.vue$/
  )
  // 遍历获取到的文件名,依次进行全局注册
  requireComponent.keys().forEach(fileName => {
    // 获取组件配置(实例)
    const componentConfig = requireComponent(fileName)
    // 获取组件的 PascalCase 命名(eg: MYHeader)
    const componentName = _.upperFirst(
      // 获取驼峰式命名
      _.camelCase(
        // 剥去文件名开头的 `./` 和结尾的扩展名 eg: ./food-header.vue -> foodHeader
        fileName.replace(/^./(.*).w+$/, ‘$1‘)
      )
    )
      // 全局注册组件
    Vue.component(
      componentName,
      // 如果这个组件选项是通过 `export default` 导出的,
      // 那么就会优先使用 `.default`,
      // 否则回退到使用模块的根。
      componentConfig.default || componentConfig
    )
  })
}

以上是关于批量自动化注册全局组件(Vue3)的主要内容,如果未能解决你的问题,请参考以下文章

vue3全局注册组件

Vue3 组件。基本组件,全局组件引用,组件批量引用

如何将类型从 Vue3 组件导出到全局范围?

访问 Vue3 全局组件

Vue3

VUE3@clli组件样式全局组件配置打包