node_modules包路径查找规则,依赖版本生效规则

规则

  1. 如果导入的模块不是nodejs的内置模块,如fs(文件读写模块),path(路径模块),http(服务器模块),也不是以/,…/ 或者./ 开头的本地模块,而是第三方模块(通过npm下载的模块)
    那么nodejs会尝试从当前模块所在目录开始,尝试在它的 node_modules 文件夹里加载相应模块,根据模块的package.json来加载对应的模块;如果没有找到,那么就再向上一级目录移动,查找上一级目录的node_modules下有无对应的模块,直到文件系统的根目录为止。

例如,假设在 /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. ^ 指的是只要不修改 [major, minor, patch] 三元组中,最左侧的第一个非0位,都是可以的
^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. ~ 简而言之就是允许修改最后一位被指定的版本号
~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)
  1. 不带标志,1.2.3则意味着指定版本的依赖包,即锁定版本号。

安装依赖规则参考原文链接:https://blog.csdn.net/cindy647/article/details/105228158
https://blog.csdn.net/cindy647/article/details/105228158

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: vue-element-admin的node_modules是Vue项目所依赖的所有第三方库和插件的集合。在使用vue-element-admin开发项目时,我们通常会引入一些列npm来完成各种功能需求。 这些node_modules被存放在项目的根目录下的node_modules文件夹中,每个都有自己的文件结构和功能。在项目开发中,我们可以根据需要引入相应的,然后在代码中使用其提供的组件、函数或工具。这些可能括Vue官方库、UI框架、路由器、状态管理工具、网络请求库等等。 node_modules的安装一般通过npm(Node Package Manager)或者yarn(另一种管理工具)来完成。当我们在项目中引入一个新的依赖时,这些工具会帮助我们自动下载和安装对应的node_modules,以确保我们能够顺利使用它们。 然而,在实际开发中,由于项目的依赖关系较复杂,node_modules的体积较大,这会导致node_modules文件夹占用较大的磁盘空间。为此,我们可以通过在.gitignore文件中添加node_modules的忽略规则,来避免将整个node_modules提交到版本控制系统中,从而减小代码仓库的体积。 总结来说,vue-element-admin的node_modules是Vue项目所依赖的第三方库和插件的集合,它们提供了丰富的功能和工具,帮助我们更高效地开发Vue项目。 ### 回答2: vue-element-admin是一个基于Vue.js和Element UI的开源后台管理系统模板。 node_modules是一个存放着项目依赖的文件夹。当我们在开发过程中使用了一些外部库或框架时,这些库或框架的代码通常会以npm的形式存在于node_modules文件夹中。 在vue-element-admin项目中,node_modules文件夹中存放着该项目所依赖的各种npm。这些括了Vue.js和Element UI等核心库,以及其他一些用于构建、优化和扩展项目的辅助工具和插件。 通过将这些依赖放在node_modules中,我们可以方便地管理和更新项目的依赖关系。当我们在开发过程中需要使用某个依赖时,只需要在代码中引入即可,而无需手动下载和管理这些依赖的文件。 在项目初始化的过程中,我们可以通过npm或yarn等管理工具自动安装项目所需的依赖。这些工具会根据项目的配置文件(例如package.json)中的依赖项列表,自动从npm仓库中下载相应的,并将其保存在node_modules文件夹中。 总之,node_modules是存放着vue-element-admin项目所依赖的各种npm的文件夹。通过这些,我们可以方便地引入和使用各种功能强大的库和工具,来加速开发和丰富项目的功能。 ### 回答3: vue-element-admin是一个基于Vue.js和Element UI的开源后台管理系统模板。在使用vue-element-admin时,我们需要通过npm或yarn安装相应的依赖。而这些依赖通常会被安装在项目根目录下的node_modules文件夹中。 node_modules文件夹是用于存放项目所需的所有依赖的文件夹。当我们使用npm或yarn安装依赖时,这些依赖会被自动下载并存放在node_modules文件夹中。在node_modules文件夹中,每个依赖都有自己的文件夹,其中含了该依赖的源代码、样式文件、图片等资源。 在vue-element-admin中,node_modules文件夹中的依赖括了Vue.js、Element UI以及其他一些第三方库。这些依赖的存在是为了帮助我们快速搭建一个功能完善的后台管理系统。通过运行npm run dev或yarn serve命令时,vue-element-admin会自动加载和使用这些依赖,以实现系统的各种功能,例如路由管理、页面展示、表单验证等等。 需要注意的是,由于依赖非常复杂且数量庞大,node_modules文件夹通常会非常庞大,可能会占用较大的磁盘空间。因此,在上传或分享项目时,通常会将node_modules文件夹排除在版本管理工具(如Git)的跟踪之外,而是只保留package.json等描述依赖关系的配置文件,方便他人在自己的开发环境中重新安装依赖。 总结来说,vue-element-admin的node_modules文件夹是用于存放项目所需依赖的文件夹,含了Vue.js、Element UI以及其他第三方库。它是构建vue-element-admin后台管理系统必不可少的一部分,通过使用这些依赖,我们可以快速搭建出一个功能完善的后台管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

godlike-icy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值