Node.js - 模块缓存,部分完​​成的对象和循环依赖?

mae*_*ics 6 javascript dependency-management node.js

有关模块缓存node.js文档中,进行以下语句:

多次调用require('foo')可能不会导致模块代码多次执行.这是一个重要的特征.有了它,就可以返回" 部分完成 "的对象,从而允许加载传递依赖,即使它们会导致循环.

我对最后一句话感到有点困惑.什么是"部分完成"的对象?这与允许(或避免)周期性依赖关系有何关系?

Eri*_*ser 5

如果您require是一个文件包,并且导致该包中require的文件导致该初始化的文件,require则您具有循环依赖性.默认情况下,它只会进入圈子.为了防止这种情况,可以在原始require文件的位置保留一个标记,以便下次该文件require从该点开始而不是从开头开始.它并不完美,但在加载包装的情况下,您通常只对出口感兴趣,并且在这种情况下效果很好.

我推迟了一段时间用于node-browserify,以获得"部分完成"导出的原始方法.基本上,每次出现require问题都会检查出口量.如果有更多的导出,则意味着最后一次包不完整,并且仍然可以处理.如果没有新的导出(新旧计数相等),则表示包已完成,并且可以缓存,以便模块代码不会多次执行.因为它在浏览器中,所以无法控制执行流程,因此模块代码将部分重复(逐步)直到完成.而我确信Node.js具有更优雅的处理能力.