前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小技巧之require.context的使用

小技巧之require.context的使用

作者头像
用户9914333
发布2022-07-22 13:49:54
4970
发布2022-07-22 13:49:54
举报
文章被收录于专栏:bug收集

01

前 言

在项目开发中,经常需要import或者export各种模块

经常会这样引入组件:

代码语言:javascript
复制
import A from 'components/A'
import B from 'components/B'
import C from 'components/C'
import D from 'components/D'
// ...

这样很头疼,因为每加一个组件,可能都要写这么一句,这样有规律的事,是否可以通过自动化完成?

答案是肯定的,那就是使用require.context

那么有没有什么办法可以简化这种引入或者导出操作呢?答案是肯定的,下面就为大家介绍一下require.context

02

require.context

语法:

代码语言:javascript
复制
require.context(directory, useSubdirectories, regExp)
  1. directory: 要查找的文件路径
  2. useSubdirectories: 是否查找子目录
  3. regExp: 要匹配文件的正则

用法:

代码语言:javascript
复制
require.context('./components/', true, /\.js$/)

看下keys是作用

代码语言:javascript
复制
const ctx = require.context('./components/', true, /\.js$/)
console.log(ctx.keys())
// ["./A.js", "./B.js", "./C.js", "./D.js"]

其实就是

代码语言:javascript
复制
var map = {
  "./A.js": "./src/components/test/components/A.js",
  "./B.js": "./src/components/test/components/B.js",
  "./C.js": "./src/components/test/components/C.js",
  "./D.js": "./src/components/test/components/D.js"
};

Object.keys(map)

那么如何引入ABCD组件呢?

代码语言:javascript
复制
const ctx = require.context('./components/', true, /\.js$/)
const map = {}
for (const key of ctx.keys()) {
  map[key] = ctx(key)
}
console.log(map)

看到了吧!成功import进来了,但'./A.js'这样的key有点不太好,自己可以处理字符串生成自己想要的key

03

优化的公共方法

可以优化一下,生成一个公共的方法

代码语言:javascript
复制
const importAll = context => {
const map = {}

for (const key of context.keys()) {
const keyArr = key.split('/')
    keyArr.shift() // 移除.
    map[keyArr.join('.').replace(/\.js$/g, '')] = context(key)
  }

return map
}

export default importAll

使用

代码语言:javascript
复制
import importAll from '$common/importAll'
export default importAll(require.context('./', true, /\.js$/))

参考:https://zhuanlan.zhihu.com/p/59564277

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档