先说

webpack里面有这么一招:使用require.context()方法来自动导入模块

官方文档有点深奥,老衲百度下拿了一段来直接使用,但是想看下它是如何运行的

本篇这里不会有太深入的研究,只是用一种解读方式更有助于理解它的原理

老衲使用的是随便vue项目的vuex改造来做例子

我们这里只研究require.context()怎么回事,不是讲解vuex怎么改造。

开始

先建这么个目录结构,里面2个模块:

模块里随便导出点东西,我们就用简单的对象:

在store.js中,然后我们抄了段代码是这样子的:

当然是先看输出结果,是这样子的:

这样,就成功读取了我们2个文件内导出的模块对象

研究

上面的代码可能有点玄乎,我们来改造下,拆解成最土的代码以便理解,比如这样子:

require.context()运行后,返回的是一个函数,把rcfn打印出来:

可以点击它(使用chrome),进入这个函数内部,看到这么些东西:

下面的模块向外暴露出webpackContext方法

这个方法有一个参数,返回了使用__webpack_require__方法加载的模块

并且webpackContext还有一个keys属性,是一个方法,返回了上面map对象的key

也就是我们上面例子调用时,modules目录下面的文件+路径名

所以很清楚了,代码中我们使用const moduleKeys = rcfn.keys(),来得到文件名数组:

新建一个空数组,遍历上面那个得到的文件名+路径数组,带入最开始require.context()返回的方法rcfn

上面提到,这个返回的方法,其实内部就是返回引用__webpack_require__来加载模块

这样,我们得到了modules数组,里面就是2个元素,每个元素里面有我们导出的默认模块

使用map过滤一下:

解散

总结 require.context() 用法就是 遍历目录下的文件名,再用文件名来加载文件中的模块。

最新文章

  1. C#自定义大小与改变大下的方法
  2. node_modules\typescript\lib 未指向有效的 tsserver 安装 将禁用TypeScript 语言功能
  3. log4j配置文件详解
  4. Android 中this、 getApplicationContext()、getApplication()之间的区别
  5. zoj 1199 几何公式推导
  6. PHP实现中文字串截取无乱码的方法
  7. 使用八种牛云存储解决方案ios7.1的app部署问题
  8. BNU OJ 50999 BQG's Approaching Deadline
  9. 201521123057 《Java程序设计》第10周学习总结
  10. JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
  11. ADC采样工作原理详解
  12. STP(Spanning Tree Protocol)
  13. html js获取URL传参
  14. IDEA的安装
  15. C#学习笔记(8)——委托应用(显示,写入时间)
  16. Codeforces 691C. Exponential notation 模拟题
  17. HUE配置文件hue.ini 的hive和beeswax模块详解(图文详解)(分HA集群和非HA集群)
  18. class表与student表之间的关系
  19. 人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门
  20. 51nod 1624 取余最短路(set)

热门文章

  1. 乐字节Java学习01-Java语言概述,Java发展前景,Java的特点
  2. Feign【替换默认的feign client】
  3. 剑指offer60:把二叉树打印成多行。上到下按层打印二叉树。
  4. unicode 格式 转汉字
  5. 缓冲区Buffer和缓存区Cache的区别
  6. Django ORM 高性能查询优化
  7. (转)从0移植uboot (四) _点亮调试LED
  8. HDU4641 K-string(后缀自动机+线段树合并)
  9. QMap里面的值任然是一个QMap,在做循环插入的时候需要记得清空。
  10. CentOS 系统下使用 yum 安装 Redis