单身人士什么时候保证如此?

时间:2017-05-03 18:42:17

标签: javascript node.js npm

假设您有一个定义

的节点包thing
var theThing = {}
exports.theThing = theThing

套餐consumer执行此操作:

var thing1 = require('thing')
var thing2 = require('thing')
assert(thing1.theThing === thing2.theThing)

这似乎通过了快速测试。假设当Node执行第二个require时,它通知thing已经被实例化,并且静静地返回指向现有实例的指针?

现在假设发生以下情况:

  • 在{npm,1.0.0和2.0.0上发布了thing的两个版本。

  • 两个包consumer1consumer2在npm上发布;它们分别依赖于版本1.0.0和2.0.0 thing,并且每个都重新导出theThing

  • 另一个打包者endConsumer依赖于consumer1consumer2

所以,如果endConsumer尝试此测试:

assert(consumer1.theThing === consumer2.theThing)

那一定是失败的,对吗?此时,Node无法重用thing的一个实例,因为需要两个不同版本的包吗?

我猜你应该最终能够依赖一个进程中无处不在的单例,当且仅当导出该单例的包的所有传递依赖性与该包的完全相同时。但这个猜测是正确的,还是其他的实际规则呢?

0 个答案:

没有答案