依赖: ros-melodic-desktop 但是它将不会被安装_npm系列之依赖管理

1. 版本控制

npm依赖包使用语义化的版本号,让开发者可以从版本号中推测修改。

版本号格式为:X.Y.Z

X:代表主版本号,只有更新了不向下兼容的API时才需要修改
Y:次版本号,当模块增加了向下兼容的功能时需要修改
Z:补丁版本号,当模块进行了向下兼容的bug修改时需要修改

npm有些符号可以用来限制版本,并且不同的符号有不同的更新版本号的规则

  • 脱字符^,限定了安装版本的主版本号
    用npm install下的依赖,写入package.json中时,就是使用的脱字符限定了版本号
"ajax": "^0.19.0",
"ava": "^1.3.1",
"babel-loader": "^8.0.5",

当我们执行 npm update packageName时,因为使用了脱字符限定了主版本号(其他符号更新时,也与符号相关),所以只会更新该大版本号下的次版本号和修订版本号更高的版本。但是有种情况例外,当主版本号为0时,这种是不稳定的版本,所以尽管用脱字符限制,但是次版本号一样不会更新,只会更新修订版本号
例:版本 ^1.2.1,可更新的范围是 >1.2.1 && <2.0.0
例:当安装了axios的0.1.0的版本,执行 npm update axios --ddd (调试,查看过程)。
没有更新,因为没有大于0.1.0的0.1.x版本

88b1623b3f6a19fe9437880fc84f2a93.png
  • 波浪号~,限定次要版本号
    例:~1.5.1代表可更新范围为>=1.5.1 && =< 1.6.0
  • x,X,*和空可以替代版本号中的任意一段,表示该位置版本号没有限制
    例:x,X,*和空可以匹配任何版本(本地测试安转时,会安装最新版本)
    1.x,可更新范围是 >=1.0.0 && =<2.0.0
  • 无符号,指定版本,如使用 vue-router: 3.0.7 只会安装这个版本号的依赖

npm install会安装满足条件的最新版本。

问题:

  1. 如何升级大版本号?
    npm install packageName@Y
  2. 如何降级版本号?
    npm install packageName@oldVersion

2. 版本锁定

为什么需要锁定依赖的版本?
在package.json中axios的依赖是 "axios": "^0.8.0",执行npm install时会安装哪个版本?
- 安装了版本0.8.1

e9cd54125d6475a09657d45d2b391b65.png

明明在package.json中写的是0.8.0,为什么安装的是0.8.1?这版本不一样啊?
- 因为准确的说package.json中写的不是版本0.8.0,而是^0.8.0,前者是一个确定的版本,而后者是一个版本范围。0.8.1是满足这个条件的最新版本。

那么问题来了,这种依赖安装的方式,那我们在本地开发和正式线上前的安装,当需要多人协同开发的时候,安转的依赖版本有可能不一样。这样可能就会导致一些,“我这里是好的,本地环境是好的”的奇怪问题。

那我们要怎么解决这个问题,使地大家都能安装同一个版本的依赖?
npm在5.0.0(但在5.6.x的版本中才稳定下来)的版本中增加了package-lock.json文件,在此版本和更高的版本中,使用npm install时会自动生成此文件。

 "axios": {"version": "0.8.1","resolved": "http://registry.npm.oa.com/axios/download/axios-0.8.1.tgz","integrity": "sha1-4Or+wPNGE5Un3Dt5/cv/gDSiQEU=","dev": true,"requires": {"follow-redirects": "0.0.7"}}

lock文件中有这个依赖安装的特定版本、下载地址、验证模块完整性的hash以及它的依赖列表。
当项目中有package-lock.json文件时,会根据此文件安装版本。使用npm更新依赖,则package-lock.json文件会被更新,package.json文件可能会更新(有时候不会,比如上面的axios的更新补丁版本号)。

那如果我手动修改了package.json文件,它和lock文件不一致了会怎么样?
- 如果是在package.json中增加或删除了依赖,npm install后会同步增加和删除
- 如果是对版本号进行了修改
1. 如果修改后的版本不是之前范围中符号固定不变的部分,则lock中的会跟着修改。
如图,我将package.json中的axios由0.8.0改为了0.7.0,将vue-router由3.0.7改为了2.0.0

6d49f730f7d888d19a8631462b29f418.png
之前固定的部分是0.8

d28a761ae16dd6b48a7095fbe6e5f04b.png
之前固定的部分时3

2. 如果修改后的版本没有影响之前固定不变的部分,lock文件不会修改
如图,我将package.json中的element-ui由2.10.1改为了2.9.1

dd0e7d93d3c4bb82dc1a88edba3753eb.png

lock文件中的并没有改变,因为它的版本依旧是满足依赖的新范围,此时不一定是最新范围。
所以在依赖降级时,要注意直接修改package.json中的版本号可能行不通。

当我们安装依赖时版本不对,可能会删掉package-lock和node_modules,重新npm install。
这种方式可能会导致,之前锁定的版本被更新。
比如以前的lock锁定了2.10.1,但是之后出来了2.10.2,重新install时,会安装后一个版本。

3. package.json中的依赖分类

1)dependencies: 项目运行时的依赖
2)devDependencies: 项目开发时的依赖。
线上环境,可以使用npm install --production忽 略开发依赖。
3)peerDependencies: 项目当前依赖所在的宿主环境所需要安装的依赖和版本
例如,element-ui的peerDependencies中有vue。如果安装element-ul,没有安装vue,npm就会警告。

e2e6892d46bc48e931c77021f14cd1ed.png

1722b1365302c193dac248bdf0e246e7.png

参考文章:

2018 年了,你还是只会 npm install 吗?​juejin.im前端工程化(5):你所需要的npm知识储备都在这了 - 掘金​juejin.im

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么修改ipv4服务器,如何修改ipv4 wins 服务器地址

如何修改ipv4 wins 服务器地址 内容精选换一换IPv6的使用&#xff0c;可以有效弥补IPv4网络地址资源有限的问题。如果当前云服务器使用IPv4&#xff0c;那么启用IPv6后&#xff0c;云服务器可在双栈模式下运行&#xff0c;即云服务器可以拥有两个不同版本的IP地址&#xff1a;I…

python 追加到字典_使用Python读取,写入和解析JSON

JSON是用于数据交换的轻量级数据格式&#xff0c;可以很容易地被人类读取和写入&#xff0c;也可以由机器轻松解析和生成。它是一种完全独立于语言的文本格式。为了处理JSON数据&#xff0c;Python有一个名为的内置包json。示例&#xff1a; s {“ id”&#xff1a;01&#xff…

couchbase_适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...

couchbase该博客将说明如何使用Docker创建部署在多个主机上的多容器应用程序。 这将使用Docker Machine&#xff0c;Swarm和Compose实现。 是的&#xff0c;这三个工具一起使这个博客变得更加有趣&#xff01; 该图说明了关键组件&#xff1a; Docker Machine用于配置多个D…

云服务器可以文件服务器,云服务器 可以上传文件

云服务器 可以上传文件 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。本地磁盘映射(推荐使…

机智云代码移植_IoT开发者 | 基于STM32F103的机智云宠物屋外加4路继电器开源教程...

[ 写在前面 ]自智云社区开辟IoT开源项目专区以来&#xff0c;一直有IoT开发者在贡献案例。玛莉甄选了一些具有代表性的案例分享给IoT爱好者们&#xff0c;本文亦如此。若你有好的案例&#xff0c;想和IoT爱好者们分享&#xff0c;欢迎投稿&#xff0c;一经采纳&#xff0c;我们…

drools。drools_Drools:fireAllRules,fireUntilHalt和Timers内部代码清理的详细说明

drools。drools在六月&#xff0c;我们在博客上发布了一个新的内部状态机&#xff0c;用于管理用户&#xff0c;计时器和引擎线程之间的交互。 现在&#xff0c;我们对该代码进行了另一次大的内部清理&#xff0c;以使其更易于阅读和理解。 如前所述&#xff0c;所有操作&…

云服务器文件打包,云服务器文件打包

云服务器文件打包 内容精选换一换Winscp无法连接到服务器。SSH连接工具例如Xshell可以正常连接云服务器。其他SSH工具连接云服务器正常&#xff0c;但是Winscp无法连接到服务器。说明SSH服务是没有问题的&#xff0c;Winscp连接基于的是SFTP协议。查看/etc/ssh/sshd_config文件…

完全复制一个dict_Redis主从复制getshell技巧

Redis未授权漏洞常见的漏洞利用方式&#xff1a;Windows下&#xff0c;绝对路径写webshell 、写入启动项。Linux下&#xff0c;绝对路径写webshell 、公私钥认证获取root权限 、利用contrab计划任务反弹shell。基于Redis主从复制的机制&#xff0c;可以完美无损的将文件同步到…

pcl_openmap_OpenMap教程3 –使用MapHandler构建基本的地图应用程序–第2部分

pcl_openmap1.简介 在上一教程中&#xff0c;我们了解了MapHandler如何将各种组件连接在一起&#xff08;更具体地说&#xff0c;是从MapHandlerChild派生的类&#xff09;。 我们看到了如何以编程方式执行此操作&#xff0c;但是还有另一种声明性地使用openmap.properties 。 …

xy轴坐标图数字表示_【相机标定】四个坐标系之间的变换关系

点击上方“新机器视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达世界坐标系&#xff0c;相机坐标系&#xff0c;图像物理坐标系&#xff0c;像素坐标系之间的关系&#xff1a;首先看下几个坐标系在放在一块的样子&#xff1a;1&#xff…

设计模式的Java 8 Lambda表达式-策略设计模式

策略模式定义封装在通常称为Context的驱动程序类中的一系列算法&#xff0c;并使这些算法可互换。 它使算法易于互换&#xff0c;并提供了在特定时间选择适当算法的机制。 算法&#xff08;策略&#xff09;在运行时由客户端或上下文选择。 在与客户端交互期间&#xff0c;Con…

调用打印机_涨知识|你不知道的关于打印机的打印过程和打印机驱动的那些事...

以前一直以为打印很简单&#xff0c;不就是编辑好文件按个“打印”就行了&#xff1f;但其实打印过程可以复杂到你分分钟“怀疑人生”。你以为的打印过程可能是这样的 ↓。我们看到的打印过程然而&#xff0c;真正的打印过程是这样的 ↓。实际上的打印过程打印机打印一页文件或…

kite 使用 go_使用Apache Storm和Kite SDK Morphlines的可配置ETL处理

kite 使用 go从我担任软件工程师的第一天起&#xff0c;我总是听到很多方面的相同要求&#xff1a; “ 我们希望所有内容都可配置&#xff0c;我们希望在运行时更改所有内容&#xff0c;我们希望有一个可视化工具来应用所有这些逻辑&#xff0c;以便非开发人员使用和配置我们的…

使用react实现select_使用 Hooks 优化 React 组件

奇技指南本文内容主要是我之前分享的文字版&#xff0c;若想看重点的话可以看之前的Slide: https://ppt.baomitu.com/d/75fc979a本文作者奇舞团前端开发工程师李喆明。需求描述由于作者所在的业务是资讯内容类业务&#xff0c;因而在业务中会经常碰到如下场景&#xff1a;有一个…

cacti不能实时刷新流量图_介绍一种编码帧内刷新算法

0.引言本文主要介绍一种帧内刷新算法&#xff0c;解决I帧太大带来的延迟问题&#xff0c;可以在调优时&#xff0c;值得借鉴。帧内刷新技术避免 I 帧尖峰带来的带宽压力&#xff0c;可以有效地降低视频通信中的缓冲区延迟。帧内刷新算法是一种视频错误恢复的方法&#xff0c;通…

按钮自动居中布局_CSS布局技巧

css实现左右布局和居中布局显示是前端进行页面设计的基础&#xff0c;也是全面了解并学习css一个很好的切入点&#xff0c;因为其中会涉及到对许多css基础点的认知。实现css入门&#xff0c;理解左右布局的实现方式是必经之路&#xff0c;同时也能使我们在项目中涉及前端编码的…

jooq_jOOQ星期二:拉斐尔·温特豪德(Rafael Winterhalter)正在与字节好友合作字节码...

jooq欢迎来到jOOQ Tuesdays系列。 在本系列文章中&#xff0c;我们每隔一个月的第三个星期二发布一篇文章&#xff0c;从jOOQ的角度采访我们发现该行业令人兴奋的人。 这包括从事SQL&#xff0c;Java&#xff0c;开放源代码以及各种其他相关主题的人员。 我们很高兴在第七版中…

多方法接口回调_啊?Java反射遇到接口

本文适合有点Java反射基础的同学&#xff0c;在Java反射调用方法时遇到接口参数是一件很蛋疼的事情。在反射调用方法时需要传参数&#xff0c;像传递基本数据类型进去用就完事&#xff0c;传个对象进去怎么整都没关系&#xff0c;因为你在外部有对象的引用&#xff0c;但 如果需…

0与1世界的初级编程篇之C语言

C语言是一门面向过程的计算机编程语言&#xff0c;与C、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速&#xff0c;工作量小…

QT 手动创建信号函数 与 槽函数

自定义信号槽必须要有Q_OBJCT 自己通过关键字signals创建信号函数,只声明信号函数即可&#xff0c;系统会自动定义它。 利用 public slots: 声明一个槽函数&#xff0c;槽函数不会自动生成&#xff0c;并且去定义它。