javascript - 拦截所有 Node 的 require 调用

标签 javascript node.js require

我正在尝试找出如何拦截所有 Node 的 require 调用,以便我可以记录它们。

已经有一些关于此的问题,但是建议的方法无法拦截所有对我的要求调用,即我想深入拦截要求调用,还有那些在我需要的模块中制作,以及他们需要的模块等等。

到目前为止,我尝试了以下3种方法:

const _req = require;
global.require = function () {
  console.log ( 'require', arguments );
  return _req.apply ( this, arguments );
};
const Module = require ( 'module' );
const _load = Module._load;
Module._load = function () {
  console.log ( 'require', arguments );
  return _load.apply ( this, arguments );
};
const Module = require ( 'module' );
const _wrap = Module.wrap;
Module.wrap = function(script) {
  const prepend = `console.log ( module.id );`;
  script = prepend + script;
  return _wrap(script);
};

但它们都不适合我。

我在 Electron v5 中运行的 Node.js v12。

最佳答案

为了实现这样的事情(拦截所有 require 调用)很可能需要包装 Module.prototype.require

Module.prototype.require = wrapWithYOURInterceptor(params);

如您所见,这是在各种“拦截”require 库中完成的:

  1. intercept-require : https://github.com/bttmly/intercept-require/blob/master/lib/index.js

  2. require-hook : https://bitbucket.org/ralphv/require-hook/src/master/lib/requireHook.js

您也可以只使用这些库,而不是开始使用新的库等。

关于javascript - 拦截所有 Node 的 require 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56203689/

相关文章:

javascript - (Eclipse) Ubuntu 14.10 : "Decoration Calculation". java.lang.StackOverflowError 期间发生内部错误

javascript - 分别启动 Angular 和 Node,但相互连接

node.js - 在单个服务器上运行多个 Node 实例

javascript - 如何忽略 JavaScript 中 require 的多个返回值之一?

php - 类 - 构造函数中需要冲突

javascript - 数组 - 当值为 true 时提取标签

javascript - 嵌套子状态中的 Angular ui 路由和多个 View

javascript - 在 Google Line Chart API 中使用字符串作为标签

node.js - 安装 puppeteer 2 Elastic Beanstalk

Ruby require_relative