如何撤消 npm 更新?

Posted

技术标签:

【中文标题】如何撤消 npm 更新?【英文标题】:How to undo npm update? 【发布时间】:2015-03-13 07:17:48 【问题描述】:

有没有办法撤消命令npm update?我运行了命令,现在我有一堆未满足的依赖项和一些错误。

我正在尝试手动重新安装并修复所有错误,但有人知道如何从本质上恢复npm update 吗?

【问题讨论】:

相关:Why does npm install say I have unmet dependencies? @JonathanLonowski 谢谢我实际上最终做了那个问题中建议的解决方案。希望我早点看到它。 我对你没有使用版本控制的暗示感到震惊(比如git)。相信我,你想要这个。 @AlanH。是的,当我最初发布此答案时,我对 npm 内部的工作方式并不十分熟悉。 The documentation is a lot clearer now。同样在 npm@5.0.0 之前,当 npm 没有将依赖项更改保存到您的 package.json 时,发生了什么变化并不那么明显 明白了????也考虑一下 Yarn。根据我们的经验,这是一个设计更好、更可靠的npm 【参考方案1】:

您可以将您的 package.json 文件恢复到之前的状态(希望您仍然拥有它,或者至少记住您所做的更改),然后再执行一次 npm update

[更新]

但是,一般而言,这种技术并不能保证您的整个依赖关系树将恢复到其之前的状态(因为依赖关系树中的 package.json 文件通常松散地指定依赖关系版本)。

如果您需要确保您的包的依赖关系树可以准确恢复,您必须使用类似npm shrinkwrap 的东西来“锁定”依赖版本(在发布包之前)。

【讨论】:

这不是简单地重做我第一次做的npm update 吗?我想恢复到原来的状态,而不是再次npm update npm update 强制执行您的节点包的依赖项,与您的package.json 中指定的完全一样(包括依赖项的版本)。它不会简单地将所有内容更新到最新版本。 啊,我明白了,谢谢你的澄清。接受你的回答。 如果您的package.json 有波浪号或插入符号版本并且依赖项更新(非主要)破坏了您的构建,您会怎么做?如何恢复到更新前安装的确切版本? 我已经更新了我的答案。不幸的是,此时您可能无法轻松解决此问题。今后,您可能希望使用 npm shrinkwrap 来避免此问题。【参考方案2】:

我所做的只是执行“rm -rf node_modules”卸载更新的 node_modules,然后执行“npm install”重新安装它们;当我进行 npm update 时,我的 package.json 没有改变,这导致了所有的破坏。因此,通过删除并重新安装 node_modules,我很高兴能重新开始工作。

【讨论】:

但是npm update 确实写入了 package.json... 可能在早期版本中不会,但现在我看到了我的 package.json 每次更新都会更新。【参考方案3】:

这样做:

git log

然后复制最新的最新密钥。这将让您检查您的最新提交。

git checkout "your-key" package.json
git checkout "your-key" package-lock.json 

没有" 引号

(package-lock.json 确实很有必要,但无论如何我都喜欢这样做——“只是为了确保......”)

你可以做一个

git status

确保您的package.jsonpackage.lock

你也可以这样做

rm -rf node_modules/ 

这将删除 node_modules 文件夹

npm install

【讨论】:

如果您想要最新的提交,您可以执行 HEAD 或者如果您已经提交更改,只需执行 HEAD~1 以获取之前的提交。不过感谢您的后续回答:) 我相信有些人会喜欢它 我不知道这是否有任何区别,但在撰写本文时npm install 似乎可以正确降级,即使您没有清除node_modules【参考方案4】:
git checkout "your-key" package.json
git checkout "your-key" package-lock.json 

没有 " 引号

package-lock.json 不是真的需要,但无论如何我都喜欢这样做 - “只是为了确保......”)

你可以做一个

git status

【讨论】:

我认为 package-lock.json 是获取完全相同的版本所必需的。【参考方案5】:

我学会了在 git 中使用不同的分支,即使是在单独工作时也是如此。

所以当我最近搞砸了我的 npm 时,我可以:

git stash(存储最近的更改) git switch main(切换回主分支) npm 更新(将 npm 包与 package.json 文件重新对齐)

关键是回到文件,然后npm更新。或者将文件从 github 中拉出,替换你的,然后 npm 更新。

【讨论】:

但是我刚刚阅读了上面的 npm shrinkwrap,所以我将在未来探索这个选项!

以上是关于如何撤消 npm 更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 npm

如何更新 npm

如何更新 npm

如何更新 npm

如何在 Windows 上更新 npm?

如何在 Windows 上更新 npm?