Webpack 模块方法——require.context

在 Webpack 中,除了可以使用 importexport 等模块语法之外,还可以使用 Webpack 提供的模块方法。其中使用最多的是 require.context

在项目中经常会遇到一个问题,组件库导入、路由注册等需要手写大量 import ,比较麻烦。这种情况下就可以使用 require.context

require.context(
  (directory: String), // 检索目录
  (includeSubdirs: Boolean), // 是否检索子文件夹,默认 true
  (filter: RegExp), // 匹配文件的正则表达式,默认值是 /^\.\/.*$/,所有文件
  (mode: String), // 可选的, 'sync' | 'eager' | 'weak' | 'lazy' | 'lazy-once',默认值是 'sync'
)

我们可以通过正则匹配需要导入的模块:

const context = require.context("./views/components", true, /\.vue$/);
// context 本身是一个函数,传入模块 ID 加载模块
// 上面还有一个静态方法 keys ,可以获取所有匹配到的模块 ID 的数组
context.keys();
// 通过遍历数组加载模块
context.keys().forEach(filename => {
  context(filename);
})

常常用来在组件内引入多个组件:

const context = require("@/components", false, /\.vue$/);

const modules = context.keys().reduce((accu, file) => {
  accu[file] = context(file).default;
  return accu;
}, {});

export default {
  components: modules
}

main.js 中实现组件全局注册:

import Vue from "vue";

const requireComponents = require.context("./views/components", true, /\.vue/);

requireComponents.keys().forEach(fileName => {
  // 获取组件实例
  const component = requireComponents(fileName);
  // 获取组件名
  const componentName = component.name;
  // 组件注册
  Vue.component(componentName, component.default);
})

参考:

https://webpack.docschina.org/api/module-methods/#requirecontext

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值