缓存

模块在第一次加载后会被缓存。这也意味着(类似其他缓存机制)如果每次调用 require('foo') 都解析到同一个文件,那么它将返回相同的对象。

多次调用 require(foo) 未必会导致模块中的代码执行多次。这是一个重要的特性。借助它, 可以返回“部分完成”的对象,从而允许传递依赖性加载, 即使它们可能导致循环。

如果你希望一个模块能够执行多次,那么,可以导出一个函数,然后多次调用该函数。

模块缓存的注意事项

模块是基于其解析的文件名进行缓存的。由于调用位置的不同,同一模块可能被解析成不同的文件名(比如从 node_modules 文件夹加载),如果它被解析成不同的文件时,就不能保证 require('foo') 总能返回完全相同的对象。

此外,在不区分大小写的文件系统或操作系统中,被解析成不同的文件名可以指向同一个文件,但缓存仍然会将它们视为不同的模块,并将重新加载该文件多次。例如:require('./foo')require('./FOO') 返回两个不同的对象,而不会管 ./foo./FOO 是否是相同的文件。

results matching ""

    No results matching ""