package-lock.json
阅读数:174 评论数:0
跳转到新版页面分类
html/css/js
正文
一、package.json
package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本。
1、specifier的作用
specifier
的主要作用是告诉包管理器(如 pnpm
)如何选择依赖包的版本。它定义了一个版本范围,包管理器会在这个范围内选择一个合适的版本进行安装。specifier
的值可以是具体的版本号、版本范围、标签(如 latest
)或 Git 仓库地址等。
2、specifier的常见类型
(1)具体版本号
指定一个具体的版本号,安装时会严格匹配该版本。
"react": "17.0.2"
(2)版本范围
-
^
:允许更新到次版本和补丁版本,但不允许更新到主版本。 -
~
:允许更新到补丁版本,但不允许更新到次版本。 -
>
:允许安装大于指定版本的任何版本。 -
<
:允许安装小于指定版本的任何版本。 -
>=
和<=
:允许安装大于等于或小于等于指定版本的任何版本。 -
*
:允许安装任何版本。 -
x
:在版本号中用x
表示任意数字,例如1.x.x
表示1.x.x
的任何版本。
(3)标签
使用标签来指定版本,常见的标签有 latest
、next
等。
"react": "latest"
(4)git仓库地址
直接指定依赖的 Git 仓库地址。
"my-package": "git+https://github.com/user/repo.git"
3、specifier的处理规则
(1)优先级:pnpm
会优先考虑 pnpm-lock.yaml
文件中记录的版本(如果存在)。如果没有 pnpm-lock.yaml
文件,则根据 package.json
中的 specifier
解析版本。
(2)版本范围:如果 specifier
是一个版本范围,pnpm
会选择满足该范围的最新版本。
(3)冲突解决:如果多个依赖包指定了同一个依赖的不同版本范围,pnpm
会尝试找到一个满足所有范围的版本。如果无法找到合适的版本,会报错并提示用户手动解决。
(4)锁定版本:一旦安装完成,pnpm
会将实际安装的版本记录到 pnpm-lock.yaml
文件中,后续安装时会优先使用锁定的版本,确保版本一致性。
二、package-lock.json
package-lock.json文件内容是node_modules文件夹中包结构的快照,npm install时会根据这份快照生成一模一样的node_modules。
1、修改的原因:
(1)手动编辑package.json中依赖包后重新install
(2)将项目依赖改为开发依赖或者相反后重新install
(3)npm regitstry修改后重新npm install,会引起package-lock.json文件中resolved字段的修改。
(4)新增、删除和更新包后重新install
其它包管理工具也会生成类似的package-locak的文件如yarn.lock、pnpm-lock.yaml,作用都大同小异。