0
点赞
收藏
分享

微信扫一扫

npm install 的加深理解(修改中)

静鸡鸡的JC 2022-04-15 阅读 43
npm

文章目录


前言

今天在摸鱼时看到一篇文章,讲到了pnpm这个包管理工具,完全不知道是啥。突然发现npm我都不怎么了解呢,想了解一下。
记得在项目开发时,从仓库拉取代码到本地后,执行 npm install,安装完依赖包后会发现package.lock.json文件会有修改。一直不理解,这个文件不是用来锁定依赖包版本的吗,怎么这个文件会被修改呢,探讨探讨一下。

环境

我使用的测试环境是npm的v8+版本,不同的大版本好像有不同的处理方式。
在这里插入图片描述

package.lock.json

此文件是用来锁定依赖包版本的,具有这种功能的文件有3个,当这3个文件放在一个项目中时,优先级顺序为从上往下。
在这里插入图片描述
我们所引入的依赖包是别人发布到npm中的,但是package.lock.json文件禁止被发布。
在这里插入图片描述
所以我们引入的依赖包中都是没有这个package.lock.json文件的!这就是关键。下面演示一下package.lock.json文件是如何变化的。

演示案例1

首先通过npm install follow-redirects@1.0.0安装一个固定版本的依赖包,下图中可以看到两个文件中的具体信息。
在这里插入图片描述
可能会有疑惑为什么如ms与debug依赖是怎么安装的呢,这是因为安装的follow-redirects依赖包中package.json中dependencies生产依赖中有debug依赖包,同理,debug依赖包的生产依赖中也有ms依赖包,所以全部安装了。

这里也可以看到下载的follow-redirects依赖包中没有package.lock.json文件
在这里插入图片描述
在这里插入图片描述
可能还有疑问为什么只有生产环境的依赖被安装了,开发环境依赖没被安装。这个原理我也不知道,我只知道安装npm发布的包就是这样。

接着下一步,npm install axios,我是经过测试知道axios是依赖follow-redirects依赖包的,所以这里安装axios。
在这里插入图片描述
可以看到package.lock.json中的follow-redirects1.0.0版升级到了1.14.9版,同时node_modules中的结构也变了。
这是因为package.json中的"follow-redirects": "^1.0.0",这是版本向上兼容的,axios的package.json中的是"follow-redirects": "^1.14.8",肯定会安装最新版1.14.9,而1.14.9又满足"follow-redirects": "^1.0.0",所以我自己的理解是相当于执行了updata更新操作。
而如果这里修改一下,将"follow-redirects": "^1.0.0"修改为"follow-redirects": "~1.0.0",使之不满足升级为最新版,结果如下:
在这里插入图片描述
竟然安装了两个follow-redirects依赖包版本,放在了不同的地方。

还有很多内容没写,在这里慢慢添加,肯定还有许多地方需要修改。

举报

相关推荐

0 条评论