【问题标题】:how to monkey patch an ambient module in node.js?如何在 node.js 中修补环境模块?
【发布时间】:2013-03-07 23:35:56
【问题描述】:

我已经全局安装了 mocha 并用它来运行一些测试:

$> mocha test.js

在 test.js 文件的根目录中,我想对 mocha 进行猴子补丁:

require('mocha').Runner.prototype.runTests = function() {...}

但是 require('mocha') 失败,因为 mocha 不在 node_modules 中而是全局安装。

如果我在我的项目中本地安装 mocha,则 require('mocha') 会找到它,但它与用于执行的环境模块不同,因此补丁不好。

如果我从本地存储库而不是全局存储库运行 mocha,那么一切正常:

$> ./node_modules/mocha/bin/mocha test.js

但是我想从全局存储库运行 mocha。有什么想法吗?

编辑:我放弃了访问全局 mocha 模块的尝试,它似乎在本地运行 mocha 并且在本地需要它对于 my use case 来说已经足够了。

【问题讨论】:

  • require('mocha') 如果全局加载 mocha 则有效。 mocha 是否仅作为依赖项安装?
  • @BenjaminGruenbaum 我对这些帖子很熟悉。我不是要告诉 mocha 不要运行一些测试。但我有自己的逻辑,所以这需要是侵入性的。但是我尽量避免直接更改 mocha 代码,以便获得它的未来版本。
  • @PascalBelloncle 使用 require('mocha') 创建最简单的 p.js 文件。那么如果本地没有安装mocha,调用mocha p会报错mocha is not found.mocha is not in
  • 是的,如果我不在本地已经安装了 mocha 的地方尝试这个,它会有所帮助。抱歉打扰了。

标签: node.js npm mocha.js monkeypatching


【解决方案1】:

鉴于npm root -g 告诉您所有全局节点模块的安装目录(我的机器上的/usr/local/lib/node_modules)并且您可以将绝对路径传递给require,因此可以这样做:

var mocha = require("/usr/local/lib/node_modules/mocha");

这会加载 mocha 的全局安装。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 2017-01-05
    相关资源
    最近更新 更多