Skip to content

Latest commit

 

History

History
13 lines (7 loc) · 1.18 KB

File metadata and controls

13 lines (7 loc) · 1.18 KB

缓存

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

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

如果你希望一个模块执行多次,那就导出一个函数,然后调用这个函数。

模块缓存的注意事项

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

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