如何撤消 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.json
和package.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 更新?的主要内容,如果未能解决你的问题,请参考以下文章