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的状态或行为 方法require new
设计用于模块测试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