@contrast/dep-hooks
拦截呼叫 require 用于修改或替换出口.
使用量
@contrast/agentify 将 dep- hooks 刻入核心为 core.depHooks 财务报告和审定财务报表
启动时安装( 它是 depHooks 内 installOrder因此,组件
只有登记处理器 :
core.depHooks.resolve({ name: 'express', version: '>=4' }, (xport, metadata) => {
// modify xport, or return a replacement
});
这个 DepHooks 类也被导出( c)require('@contrast/dep-hooks').DepHooks(中文(简体) )
用于剂外. 它的构造器需要 { logger, messages, appInfo }。 。 。 .
.resolve(descriptor, ...handlers)
选项 :
-
descriptor: 这可以是描述您想要的模块的字符串或对象 去拦截 如果使用字符串, 或描述符的版本字段 没有设置,所有版本的描述模块都将匹配。 说明 可以有一个name, (中文(简体) ),version,以及file属性. -
handlers: 其余的论据是处理者,将在 描述的模块是require'd. 每个处理器都通过导出 模块和元数据,包括模块的根目录及其名称和 文本可见于package.json文档。 如果处理器返回了真相 值,然后该值将取代require。 。 。 .
说明: 注册处理器运行 一次 每个出口的特例 匹配描述符.
.install()
这个会给猴子包扎的 Module.prototype.require 以便出口
被拦截。 不管多少次 只会有一次
这被引用.
.uninstall()
这将重置 Module.prototype.require 其价值在存在之前
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}猴子被尸体吸过.
实例
使用大小写 : 对于 express 大于或等于4的版本,拦截
导出软件包 lib/view.js 文件(与软件包的基数有关)
目录)和对导出函数应用标记.
core.depHooks.resolve(
{
name: 'express',
version: '>=4',
file: 'lib/view.js',
},
(xport, metadata) => {
// From the package's package.json:
// - metadata.name
// - metadata.version
// The package's root directory:
// - metadata.packageDir
// xport === function View() { /*...*/ }
xport['I was intercepted'] = true;
},
);
使用大小写 : 截取所有版本的 body-parser 替换导出
函数.
core.depHooks.resolve({ name: 'body-parser' }, (xport, metadata) => {
// From the package's package.json:
// - metadata.name
// - metadata.version
// The package's root directory:
// - metadata.packageDir
// xport === function bodyParser() { /*...*/ }
return function bodyParserReplacement() {
/*...*/
};
});