例如,假设在 /root/home/user/bottomBar/index.js 文件里调用了:
import bar from 'bar.js'
那么 nodejs 查找其位置的顺序依次为:
/root/home/user/bottomBar/node_modules/bar.js
/root/home/user/node_modules/bar.js
/home/node_modules/bar.js
/root/node_modules/bar.js
/node_modules/bar.js
若果追踪到文件系统的根目录也没有找到对应的依赖,那么nodejs就会找不到对应模块的报错。
案例1:
安装的模块里又引用了其他的模块,这个模块会按照规则先在自己的node_modules里查找它自己引用的模块,找不到再向上查找。
简而言之,当前的模块的node_modules找到了自己的依赖里使用的这个包,就不会再向上查找了,所以你即使在最外层的模块里加载了最新的这个包,那么它也不会生效。
这里我们以react脚手架工具自动构建的空项目举例。
就拿clean-stack这个模块来说
我们的_aggregate-error模块内部使用的是2.2.0版本
即使你在项目最外层的package.json里引入了2.2.0以上的版本,那么它并不会被向上加载到。
案例2:
当多个同级模块都引入了同一个模块,但它们的版本不一样。模块之间是互相独立的,他们都会在它自身的node_module里先找,如果都找到了,那他们所用的模块确实是不同版本的。如果没找到就会向上查找。
至于模块版本安装的规则* ^ ~ 以及锁定版本
,可以先基础的了解下:
^1.2.3 匹配 >=1.2.3 < 2.0.0
^0.2.3 匹配 >=0.2.3 <0.3.0
^0.0.3 匹配 >=0.0.3 <0.0.4
~1.2.3 匹配 >=1.2.3 <1.3.0
~1.2 匹配 >=1.2.0 <1.3.0 (Same as 1.2.x)
~1 匹配 >=1.0.0 < 2.0.0
~0.2.3 匹配 >=0.2.3 <0.3.0
~1.2 匹配 >=1.2.0 <1.3.0 (Same as 0.2.x)
~0 匹配 >=0.0.0 < 1.0.0(Same as 0.x)
安装依赖规则参考原文链接:https://blog.csdn.net/cindy647/article/details/105228158
https://blog.csdn.net/cindy647/article/details/105228158