结合stackoverflow上的回答What is "require.context"?,
因为比较精通typescript一点,用ts描述基于require.contex的依赖管理:
declare namespace Webpack {
/**
* 这是模块id,webpack会将所有的模块构建成一个逻辑上的图,
* 我们知道图这种数据结构,需要一个id来标志每个部分
* webpack通过modelueId来区分每个模块
*/
type modelueId = string
/**
* 模块
*/
type modelue = {
default: any, //默认模块
[key: string]: any //有名称的模块
}
/**
* nodejs有require关键字,webpack在上面添加了自己的api: context
*/
interface require {
//这是webpack提供的API,会将指定目录下的得到的文件形成一个module,允许我们在runtime阶段动态引入目录下的文件
//该module中的每个文件,以request标志,resquet是一个字符串
//resquet是一个字符串,modelueId一样的作用,标志文件而已。
//注意被标志的文件没有进入webpack构建的模块图中,仅仅是在内存中存着
context: {
(
directory: string, //文件目录的路径,以使用该函数的js文件的相对路径为主,就像'../components/'
useSubdirectories?: true, //是否递归,如果目录有子目录,继续解析子目录
regExp?: RegExp, //模式匹配目录下的文件
mode?: 'sync' | '' //模块导入模式
)
: {
(request: string): modelue //解析一个request,动态注册一个模块,并返回该模块
resolve: () => modelueId //动态注册一个模块后调用该函数,得到该模块的id
id: modelueId //文件目录模块的id
keys: () => string[] //目录下得到的所有的文件的request值
}
}
}
}