繁体   English   中英

替换公共npm包中的函数

[英]replace a function in public npm package

因此,我使用的是api包装程序包,该程序包再次将请求用于api请求。 在大多数设置中都能正常工作。 但是我想在节点Webkit环境中使用该软件包,并使用XHR代替请求模块。 它可以与API一起使用,并且如果我重写模块也可以。 但是由于更新的舒适性,我不想这样做。 因此,分叉不是我的选择。 是否可以在不更换模块的情况下更换模块中的一个功能。

var request = require('request');
var makeRequest = function(path, args, secure, callback, encoding) {
  var maxlen = 2048;

  var path = buildUrl(path, args);
  if (path.length > maxlen) {
    throw new Error("Request too long for google to handle (2048 characters).");
  }

  var options = {
    uri: (secure ? 'https' : 'http') + '://some.api.com' + path
  };

  if (encoding) options.encoding = encoding;
  if (config('proxy')) options.proxy = config('proxy');

  if (typeof callback === 'function') {
    request(options, function (error, res, data) {
      if (error) {
        return callback(error);
      }
      if (res.statusCode === 200) {
        return callback(null, data);
      }
      return callback(new Error("Response status code: " + res.statusCode), data);
    });
  }

  return options.uri;
};
module.exports = makeRequest;

所以现在我想在不更改makeRequest的情况下替换整个makeRequest函数的request函数。 因此,基本上我想覆盖该功能。

编辑:添加代码示例。

看看ReWire的proxyquire ,能够解决您的问题。

如果您使用的模块仅在内部使用makeRequest,我看不到任何其他解决方案,即使只有在您需要的模块(文件)中需要makeRequest的情况下,此方法也才有效。

但请记住,这可能是不好的,通常应仅用于测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM