require.context
reqiure.context(directory, useSubdirectories = true, regExp = /^\.\/.*$/,mode = 'sync)
- 参数一:要搜索的目录
- 参数二:一个标记,表示是否还搜索其子目录
- 参数三:一个匹配文件的正则表达式
webpack会在构建中解析代码中的 require.context()
实例
reqiure.context('./test',false,/\.test\.js$/)
(创建出)一个context,其中所有文件都来自test 目录,request以
.test.js结尾
require.context('../',true,/\.stories\.js$/)
(创建出)一个context,其中所有文件都是来自父文件夹及其所有子级文件夹, request以
.stories.js结尾
导出的结果
上下文模块导出一个带一个参数的(require)函数:请求。 导出的功能有三个属性:resolve,keys,id
- resolve是一个函数,返回已解析请求的模块ID
- keys是一个函数,它返回上下文模块可以处理的所有可能请求的数组。 如果要在目录中要求所有文件或与模式匹配,这将很有用
function importAll(r){
r.keys().forEach(r);
}
importAll(require.context('../components/', true, /\.js$/))
require.context 的返回值,这个返回值是一个函数,只要传入函数名就会被 webpack 自动进行导入
const cache = {};
function importAll(r){
r.keys().forEach(key => cache[key] = r(key))
importAll(require.context('../components/', true, /\.js$/));
// 在构建时缓存将填充所有必需的模块。
- id是上下文模块的模块ID。这可能对有用module.hot.accept。
forEach() 性能比 map() 要好,map() 比 for 在遍历时要慢几百倍,如果追求性能,更推荐手工 for。