CNode

Nodejs在require同一个包不同版本的时候会在缓存中加载,还是会重新进行路径分析和文件定位?

问答
Ddai1054067910发布于9 年前最后回复9 年前3 回复4190 浏览0 收藏
查看回复

回复 (3)

Y
Yuki-Minakami#1·9 年前

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

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

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

H
haozxuan#2·9 年前

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

D
dai1054067910#3·9 年前
引用 Yuki-Minakami可以参考 http://javascript.ruanyifeng.com/nodejs/module.html 在缓存中加载应该只限于同一个路径下的同名文件,《深入浅出》的说法也没问题

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

参与回复
登录后即可参与回复。登录