Node.js 需要节点模块的新实例

Node.js 需要节点模块的新实例,node.js,node-modules,Node.js,Node Modules,其中一个模块中需要一个新的第三方模块实例 // a ... exports.thirdParty = require('third-party'); 所有列出的模块都有类似的包装要求 dependencies: { "third-party": "^1" } 并且要求它保持完整,没有像“第三方”这样的把戏:git://...“是允许的 假设用户只控制第一方模块,并且不能修改第三方模块,使其具有一个新的工厂方法,该方法将返回一个新实例 我知道,如果版本在所有情况下都是相同的,第三方会

其中一个模块中需要一个新的第三方模块实例

// a
...
exports.thirdParty = require('third-party');



所有列出的模块都有类似的包装要求

dependencies: {
  "third-party": "^1"
}
并且要求它保持完整,没有像
“第三方”这样的把戏:git://...“
是允许的

假设用户只控制第一方模块,并且不能修改第三方模块,使其具有一个新的
工厂
方法,该方法将返回一个新实例

我知道,如果版本在所有情况下都是相同的,
第三方
会被缓存一次(从技术上讲,重要的是第三方的完整路径),很可能是
。所有对象中的第三方
属性都是相同的

如何在Node.js中以编程方式(而不是使用package.json)解决此问题

这里有一个模块可以满足您的要求

  • 需要新的
    需要新的模块对象

  • require new
    不影响require的状态或行为 方法

  • require new
    设计用于模块测试

以下是本模块的示例

require('./rand.js'); // 0.697190385311842
require('./rand.js'); // 0.697190385311842
模块在需要时缓存在
require.cache
对象中

require new
从与您请求的模块关联的
require.cache
对象中删除键值,使模块重新加载:

requireNew('./rand.js'); // 0.2123227424453944
requireNew('./rand.js'); // 0.5403654584661126

可能与此有关。尝试使用
delete require.cache['third-party']
。可能是此模块
https://github.com/gajus/require-new
能解决你的问题吗?@zangw很好,谢谢,看起来正是我需要的。如果你愿意,可以把它作为答案贴出来。@peacer212是的,它是相关的,但问题更复杂。删除模块缓存将影响所有需要“第三方”的模块。如果模块路径相同(并且相同),则不会解析为其他副本。对于宽松的版本限制(如我的情况),将只安装一个第三方副本,
node\u模块/third-party
npm2,
node\u模块/third-party-party@1.0.0
使用npm3。不会有
node\u模块/a/node\u模块/第三方
dependencies: {
  "third-party": "^1"
}
require('./rand.js'); // 0.697190385311842
require('./rand.js'); // 0.697190385311842
requireNew('./rand.js'); // 0.2123227424453944
requireNew('./rand.js'); // 0.5403654584661126