使用require.context实现前端工程自动化

211 阅读1分钟

介绍

webpack的一个api,通过执行require.context() 获取一个特定的上下文,主要用来实现自动导入模块。
当我们遇到要从某一文件夹中导入多个模块时,我们可以用这个api,来进行导入,这样就不用每次都要单独导入了。

使用

假如有多处用到某些同一文件夹下的组件时,我可以利用它配合全局注册,这样就不用每次使用时导入了
以下例子用来设置一些公用的组件,这样当用到这些公用组件时,无需引入直接使用即可。

globalComponents.ts

/**
 require.context(
 '路径',
 '是否查询子目录-boolean',
 '匹配到组件文件名的正则'  
 ) */

import { App } from "vue";

const requireComponents = require.context(
  "../../components/globalComponents",
  false,
  /[A-Z]\w+.(vue|js)$/
);

export default {
  install: (app: App) => {
    requireComponents.keys().forEach((fileName) => {
      //  获取组件配置
      const componentConfig = requireComponents(fileName);
      //  获取大驼峰式名字
      const componentName = fileName.replace(/^./(.*).\w+$/, "$1");
      app.component(
        componentName,
        // 如果这个组件选项是通过 `export default` 导出的,
        // 那么就会优先使用 `.default`,
        // 否则回退到使用模块的根。
        componentConfig.default || componentConfig
      );
    });
  },
};

demo.vue

在demo.vue中 Scroll、Item、Loading这三个组件都是通过require.context()全局导入的。

<template>
  <div class="rank">
    <Scroll >
      <Item />
    </Scroll>
    <Loading />
  </div>
</template>


<script lang='ts'>

export default defineComponent({
  setup() {
   
})
</script>