【问题标题】:replace a function in public npm package替换公共 npm 包中的函数
【发布时间】:2014-04-25 20:42:01
【问题描述】:

所以我正在使用一个 api 包装器包,它再次使用请求来处理 api 请求。在大多数设置中都可以正常工作。但我想在 node-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 函数的请求函数。所以基本上我想覆盖这个函数。

编辑:添加代码示例。

【问题讨论】:

  • 如果您提供一些代码(例如您要修补的功能)会更容易回答

标签: javascript node.js package npm


【解决方案1】:

看看rewireproxyquire,可以解决您的问题。

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

但请记住,这可能很糟糕,通常只能用于测试。

【讨论】:

  • 我会看看这些解决方案,希望它们能解决我的问题。否则我需要重写模块,这还不错,但我讨厌失去模块的可更新性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2016-05-22
  • 2023-03-08
相关资源
最近更新 更多