dys*_*xit 7 node.js npm package.json
我有一个项目,我从文件中删除了一些不再需要的库package.json
,remove node_modules
,run npm install
,一切都继续按预期工作。
不幸的是,如果我在删除后package-lock.json
按照上述相同的步骤操作,我的构建会突然中断。生成了一个新的package-lock.json
,但我现在收到了来自某些依赖项的数百个弃用警告,即使项目继续构建这些相同的依赖项也会在意外的地方中断。
如果我恢复到之前的package-lock.json
状态并再次运行相同的步骤(remove node_modules
、run npm install
),警告将再次消失,并且构建再次处于安全状态。
我的理解是,package-lock.json
每次我们运行npm install
最新的软件包版本时,都会更新,并遵守插入符^
和波浪号~
限制。如果我们有现有package-lock.json
安装和全新安装,此更新是否有所不同?
即使子依赖项之间存在某种冲突,我仍然很困惑为什么更新 a package-lock.json
withnpm install
效果很好,但npm install
在删除该文件后运行会创建一个新的package-lock.json
中断文件。经过多次尝试,这种情况始终发生。
我对自己的仓库也有同样的困惑。
所以我写这篇文章既是为了你,也是为了你,希望我下次来寻找解决方案时能记住它。
这个 npm 问题的更新为我澄清了一切:
- 如果你有一个
package.json
并且你运行我们会从中npm i
生成一个 。package-lock.json
- 如果您反对
npm i
和package.json
,package-lock.json
后者将永远不会更新,即使他们package.json
会对更新的版本感到满意。- 如果您手动编辑您
package.json
以具有不同的范围并运行npm i
,并且这些范围与您的不兼容package- lock.json
,那么后者将更新为与您的package.json
. 进一步的运行npm i
将与上面的 2 一样。
以下是对您的案例所发生情况的解释:
我有一个项目,我从 package.json 文件中删除了一些不再需要的库,删除了 node_modules,运行了 npm install,一切都继续按预期工作。
在本例中,它正在执行上面的步骤 2。您已经package-lock.json
使用所有正确的依赖项版本进行了工作。于是基于package-lock.json
. package-lock.json
即使您package.json
说它会对新版本感到满意,它也不会进行编辑。
不幸的是,如果我在删除 package-lock.json 后按照上述相同步骤操作,我的构建会突然中断。生成了一个新的 package-lock.json,但我现在从某些依赖项中收到了数百个弃用警告,即使项目继续构建这些相同的依赖项也会在意外的地方中断。
在本例中,它正在执行上面的步骤 1。未package-lock.json
找到,因此它从 重新创建了您的项目,并根据您的允许package.json
更新到较新的版本。package.json
然后它package-lock.json
根据该安装生成一个新的。对您来说不幸的是,这些更新版本破坏了您的项目。
如果我恢复到以前的 package-lock.json 并再次运行相同的步骤(删除 node_modules,运行 npm install),警告将再次消失,并且构建再次处于安全状态。
这本质上是在做与以前相同的事情。它正在执行上面的步骤 2。由于您再次使用package-lock.json
所有正确的软件包版本,它将基于package-lock.json
. package-lock.json
即使您package.json
说它会对新版本感到满意,它也不会编辑。这就是它再次起作用的原因,因为没有任何软件包升级到有问题的版本。
我的理解是,每次我们使用最新的软件包版本运行 npm install 时,package-lock.json 都会更新,并遵守插入符号^和波形符~的限制。如果我们有现有的 package-lock.json 与全新安装,此更新是否有所不同?
是的,这会与上述步骤中所述有所不同。如果您有现有的,package-lock.json
它将尊重并安装那些确切的软件包版本。如果您正在进行全新安装,它将更新到package.json
.
这就是为什么package-lock.json
应该致力于版本控制并且永远不要删除。npm 文档也建议这样做。
有时您可能会想通过删除package-lock.json
来解决冲突。这是一个坏主意,正如这个问题中详细解释的那样。相反,您可以手动进行更改package.json
然后运行npm install
。这就像执行上面的步骤 3 一样。或者你也可以这样做npm update {dependency}
或npm install {dependency}@2.1.3
具有相同的效果。
归档时间: |
|
查看次数: |
6740 次 |
最近记录: |