什么是`require.context`

GN.*_*GN. 30 webpack

Webpack文件

You can create your own context with the require.context() function.
大。什么是“上下文”?这实际上是做什么的?

It allows you to pass in a directory to search, a flag indicating whether subdirectories should be searched too, and a regular expression to match files against.
允许我“搜索”吗?搜索我假设的文件,然后呢?此功能最终会做什么?它是干什么用的?

Fil*_*vić 35

之一的WebPack的编译器的主要特征是递归地解析所有的模块,从条目开始,建立通过分析所有的模块依赖关系的曲线图require()require.context()importimport()表达式。

webpack和Node.js中对“上下文”的通常解释是一些目录,用作解析模块路径的基础。例如,当前工作目录用作webpack 的默认上下文,以解析index.js进入模块的实际路径;请求的上下文require.resolve('../../../foo.js')__dirname

require.context是webpack编译器支持的一项特殊功能,使您可以从某个基本目录开始获取所有匹配的模块。目的是在编译时告诉webpack将表达式转换为它可以解析的所有可能匹配模块请求的动态列表,然后将它们添加为构建依赖项,并允许您在运行时要求它们。

简而言之,require.context当您在运行时在Node.js中使用glob动态构建所需的模块路径列表时,将使用完全相同的情况。返回值是一个行为类似于require的可调用对象,该对象的键包含必要的模块请求数据,可以将这些数据作为参数传递给require模块。

您可以通过多种方式使用它,但是我认为两个最常见的用例要么自动地需要一些众所周知的模块(例如,您仅添加some.test.js测试模块,然后在某些模块中require.context用于动态发现所有测试,因此不必记录文档并记住每次添加新的测试模块时都要手动进行操作),也不必在存储库中加载静态资产以向构建输出发送文件(来自其他构建工具的新webpack用户通常会对它们的图像感到惊讶) ,字体,音频文件和其他资源不会显示在输出中,除非某些模块需要它们)。

  • @ArmandoJúnior:如上所述,假设返回的“srcContext”是执行动态“require(someModule)”的函数;每个“键”都是一个“模块说明符”。因此 forEach 将调用dynamic-require(module-key0); 动态需求(模块键1);...最终告诉 webpack 每个由 'require-context' 标识的模块都被视为 *required*。 (2认同)