npm i 和 package-lock 文件有什么关系?
What is the deal with npm i and the package-lock file?
我相信我了解 npm i
的工作原理,使用 package.json
文件和 dependencies
以及这些库的版本。我知道 package-lock.json
是该构建的输出,具体版本在树下。未来 npm i
将使用此锁定文件中指定的版本。太棒了!
我当前的问题是当我们删除 package-lock.json
文件时,npm i
拉下库的 最新版本,忽略package.json
中指定的版本!为什么要这样做?
我们有几个库正在执行此操作,但在我们的新版本中造成严重破坏的是:"react-lazyload": "^2.6.2",
。删除锁定文件后,它会下载 2.6.8
,这对我们的 UI 进行了重大更改。为什么 npm
会抢到最新的?
我检查了锁定文件,这是整个库中唯一使用它的实例,没有其他库请求新版本。
顺便说一句,这似乎只发生在我们的 Jenkins 服务器上,部署我们所有的代码,运行 与我们的开发机器 Node/npm 的版本相同:
node -v
v10.16.3
npm -v
6.9.0
它不会忽略 package.json 中的版本,它只是遵循语义版本控制规则。
如果你使用
"react-lazyload": "^2.6.2"
这意味着 npm 将下载包的版本 2.X.X,获取最新的次要版本(第二个数字)和最新的补丁(第三个数字)。
如果您使用 "react-lazyload": "~2.6.2"
,它将下载版本 2.6.X 的软件包,只获取最新的补丁(第三个数字)。
如果您使用 "react-lazyload": "2.6.2"
,它将始终下载 2.6.2 版本
我相信我了解 npm i
的工作原理,使用 package.json
文件和 dependencies
以及这些库的版本。我知道 package-lock.json
是该构建的输出,具体版本在树下。未来 npm i
将使用此锁定文件中指定的版本。太棒了!
我当前的问题是当我们删除 package-lock.json
文件时,npm i
拉下库的 最新版本,忽略package.json
中指定的版本!为什么要这样做?
我们有几个库正在执行此操作,但在我们的新版本中造成严重破坏的是:"react-lazyload": "^2.6.2",
。删除锁定文件后,它会下载 2.6.8
,这对我们的 UI 进行了重大更改。为什么 npm
会抢到最新的?
我检查了锁定文件,这是整个库中唯一使用它的实例,没有其他库请求新版本。
顺便说一句,这似乎只发生在我们的 Jenkins 服务器上,部署我们所有的代码,运行 与我们的开发机器 Node/npm 的版本相同:
node -v
v10.16.3
npm -v
6.9.0
它不会忽略 package.json 中的版本,它只是遵循语义版本控制规则。
如果你使用
"react-lazyload": "^2.6.2"
这意味着 npm 将下载包的版本 2.X.X,获取最新的次要版本(第二个数字)和最新的补丁(第三个数字)。
如果您使用 "react-lazyload": "~2.6.2"
,它将下载版本 2.6.X 的软件包,只获取最新的补丁(第三个数字)。
如果您使用 "react-lazyload": "2.6.2"
,它将始终下载 2.6.2 版本