Nodejs在require同一个包不同版本的时候会在缓存中加载,还是会重新进行路径分析和文件定位?
发布于 7 年前 作者 dai1054067910 3413 次浏览 来自 问答
3 回复

可以参考 http://javascript.ruanyifeng.com/nodejs/module.html

缓存是根据绝对路径识别模块的,如果同样的模块名,但是保存在不同的路径,require命令还是会重新加载该模块。

在缓存中加载应该只限于同一个路径下的同名文件,《深入浅出》的说法也没问题

不同版本的逻辑可能不同,《深入浅出》是写在npm2,所有的模块和模块依赖的模块都是自成目录,按照模块加载优先级会加载自己目录下的模块版本,npm3以后模块的依赖被拆分在第一目录下,但对于不同版本的相同模块,为了更好的保证模块稳定性,其实也会分开记录,这样本质上就跟npm2相同了,所以结果是加载两份不同的模块到缓存中。

@Yuki-Minakami 在判断模块是否在缓存中存在之前,都会去拿到模块的绝对路径,也就意味着每次require都得进行路径分析和文件定位,在npm2这样的情况下,假如程序需要require A 和 B,即使A和B require同一个版本的C, 那么也不会从缓存中加载,因为在文件定位时都会从各自的node-modules下找到C,对吗

回到顶部