基础组件的自动化全局注册

require.context是webpack的api,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块
在这里插入图片描述

//例如在main.js中全局注册多个组件
// 基础组件的自动化全局注册
import upperFirst from "lodash/upperFirst";
import camelCase from "lodash/camelCase";
const requireComponent = require.context(
  // 其组件目录的相对路径
  "./components",
  // 是否查询其子目录
  false,
  // 匹配基础组件文件名的正则表达式
  /\.vue$/
);
console.log(requireComponent.keys()); //["./HelloWorld.vue", "./button1.vue", "./filed.vue"]

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
  );
});

然后在页面里就可以直接使用了

  <div class="box">
    <div class="con">这是一个单独的页面</div>
    <button1></button1>
    <filed></filed>
  </div>

创建组件并全局注册

// main.js

// 1、传统方法
import Vue from "vue";
import button from "@/components/button";
Vue.component("qu-button", button);
// 2、循环注册components文件夹下的所有组件注册为全局组件,组件名字为 qu-组件名
const components = require.context("@/components", true, /\.vue$/);
components.keys().forEach((filename) => {
  let arr = filename
    .replace(/\.\//, "")
    .replace(/\.vue$/, "")
    .split("/");
  let componentName = "qu-" + arr[arr.length - 1];
  let componentConfig = components(filename).default;
  Vue.component(componentName, componentConfig);
});

版权声明:本文为weixin_43848576原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。