npm安装错误:rollbackFailedOptional

110
当我尝试使用npm install安装新的包时,它显示了以下错误信息:

rollbackFailedOptional: verb npm-session 585aaecfe5f9a82


node --version
8.4.0

npm --version
5.3.0

1
我也遇到了同样的错误。你找到解决方法了吗? - Anil
1
这很可能是由于您公司的防火墙。请使用非公司互联网连接,或尝试设置由公司管理员提供的代理以访问NPM仓库服务器。 - Prometheus
安装时请确保 Terminal 处于聚焦状态。在我的情况下,我总是试图将焦点放在浏览器上,让安装程序自行处理,这样会使终端失去了焦点。但这并不起作用。在阅读了此主题的建议之后,https://stackoverflow.com/questions/62499501/npm-install-error-rollbackfailedoptional-verb-npm-session-a0d68-for-command-np 它起作用了。我基本上必须等到第一个进度条完成后才能关注其他窗口,然后下载才成功。不确定出了什么问题,但它运行得非常好。 - iheathers
这也可能发生在使用错误的包名称时,例如 npm install react-native-picker/picker 而不是 npm install @react-native-picker/picker - Eliott Paris
32个回答

134
    # first this
    > npm config rm proxy
    > npm config rm https-proxy

    # then this
    > npm config set registry https://registry.npmjs.org/

解决了我的问题。

再次提醒:务必检查您的互联网连接是否正常。


3
很遗憾,这并没有解决我的问题。我只是在一个简单的家庭网络上,没有使用代理。我已经遇到这个错误很长时间了,有时候我使用VS Code时可以打开cmd提示符(非VS Code),但不能在IDE中使用。我刚刚卸载了NodeJS,在AppData中删除了所有npm文件夹,重新安装后仍然出现此错误。 - Luke T O'Brien
2
对于那些想知道解释的人:这将简单地删除您可能设置的任何代理,并将注册表(它找到软件包的地方)设置回其默认值。因此,如果您已经错误配置了其中任何一个(并且像我一样忘记了它),那么这只会帮助您。 - Johan
@LukeTO'Brien 我也在 VS Code 终端中遇到了这个错误。 - ADJenks

62

试试这个

npm config rm proxy
npm config rm https-proxy

3
这个命令对我也管用,但你知道这个命令具体做了什么以及为什么有效吗?我在想我是否需要安装其他东西。谢谢! - aztec242
1
这样做有帮助的原因是,你的注册表设置以某种方式被设置为非默认值,而这些命令会删除这些配置设置,使它们恢复到默认值。在我的情况下,我的工作使用了一个最近被放置在防火墙后面的自定义注册表。在家里开展个人项目时,我会在此目录中专门覆盖此项目的npm设置。有关更多详细信息,请参见@lambda的答案。 - Andy Groff
工作得很好。尝试 rollBackFailed 后又出现了,但几秒钟后就消失了。我已经轻松地安装了 nativescript。谢谢。 - Md Ashraful Islam
2
在我运行 npm config set registry http://registry.npmjs.org/ 之前,它对我没有用。 - davis
和@davis一样,我也是这样的。 - kayleeFrye_onDeck

22
在我的情况下,我必须直接编辑.npmrc并手动添加代理设置。
proxy=http://yourorganizationproxy.com:8080
https-proxy=http://yourorganizationproxy.com:8080

希望这能帮助到有需要的人。


非常感谢!在我的情况下(Kubuntu),设置被添加到用户的.npmrc文件中,位于~/.npmrc下。 - a1300
我需要将键更改为“https_proxy”才能使其工作,使用npm v6.13.4。 - JamesP
仅运行 npm config set proxy http://your-organisation-proxy.com:8080 就足以满足我的需求。 - Md Azharuddin

20
这可能是由于您的当前NPM注册表引起的。尝试检查.npmrc文件。这些文件可以位于不同的位置:
  • 每个项目的配置文件(/path/to/my/project/.npmrc
  • 每个用户的配置文件(~/.npmrc
  • 全局配置文件($PREFIX/etc/npmrc
  • NPM内置配置文件(/path/to/npm/npmrc

在这些文件中可能会有类似以下的内容:

registry=https://mycustomregistry.example.org

这将优先于默认的registry(http://registry.npmjs.org/)。你可以删除文件中的这一行或者像这样使用默认的registry:

npm <command> --registry http://registry.npmjs.org/

2
在配置代理设置后,运行npm config set registry http://registry.npmjs.org/对我很有效。 - rainversion_3

16

最可能是npm注册表无法被npm访问。检查npm代理配置。

我在Windows Server 2008 R2上也遇到了同样的问题。起初我怀疑是Internet Explorer的增强安全配置,但关闭后仍然没有成功,问题最终是npm没有配置为使用我的公司代理连接到互联网。

原来,npm不使用Internet选项 > 连接选项卡 > LAN设置中生效的代理设置,其中服务器设置为“自动检测设置”。设置为自动检测设置并不能保证确实使用了代理,它只是意味着如果Windows在http://wpad.[yourdomain.com]/wpad.dat处找到一个特殊的'wpad.dat'文件,Windows将自动为Internet Explorer配置代理设置。

您可以通过在Web浏览器中输入以下内容来测试组织中是否正在使用wpad.dat文件。

http://wpad.[yourcompany.domain]/wpad.dat
如果没有文件可用,那么很可能您没有使用全组织代理。如果浏览器返回了一个文件,则...
在这个文件的底部,你应该会看到一行说:
PROXY <host:port>;

如果您有多个代理可用,可能会重复使用。需要主机和端口才能告诉npm使用代理设置,如下所示:

如果您有多个代理可用,可能会重复使用。需要主机和端口才能告诉npm使用代理设置,如下所示:

npm config set proxy http://[host]:[port]

npm config set https-proxy http://[host]:[port]
例如,如果您的代理位于my.proxy.com的8080端口,则npm命令将如下所示:

例如,如果您的代理位于my.proxy.com的8080端口,则npm命令将如下所示:

npm config set proxy http://my.proxy.com:8080
npm config set https-proxy http://my.proxy.com:8080

我告诉npm使用哪个代理服务器后,一切都开始正常工作了,我能够毫无问题地运行安装命令。

感谢以下帖子帮助我发现wpad文件。


12

在我的情况下,我将npm的注册表设置为https://nexus,使用以下命令:

npm config delete registry

这将恢复为其默认状态。


尝试了所有以上方法,但除了这个之外都不起作用。 - Hamza Waleed
所以,nexus 如何处理 rollbackFailedOptional 操作存在问题?也许 nexus 与 npm 客户端不同步。 - ADJenks

5

我尝试了以下选项来解决这个问题,并且它起作用了。

  1. 卸载 Node.js 版本 8。
  2. 安装 Node.js 版本 6.11.4。
  3. 使用注册表选项以及命令来安装任何包。

例如,要安装 express,我使用以下命令。

npm install express --registry http://registry.npmjs.org/

或者
npm install express -g --registry http://registry.npmjs.org/

如果你想在特定文件夹本地安装,则使用以下命令。以下命令将在路径 C:\Sample\Example1 安装express。
C:\Sample1\Example1> npm install /Sample/Example1 express --registry http://registry.npmjs.org/

注意: 如果您正在特定位置本地安装,请先使用命令进入该目录,然后再运行上述命令。如果您不在该目录中,并且只在命令中提供路径,则无法正常工作。

如果出现package.json缺失错误,则在本地安装软件包之前运行下面的命令。

C:\Sample\Example1> npm init

以上命令将创建package.json文件。不需要提供任何数据,只需按回车键。

注意:如果您在防火墙后,则可能需要设置代理。


3

请确保您可以访问在npm中配置的企业代码库。检查您的VPN连接。

否则,请将其重置为默认仓库,如下所示。

npm config set registry http://registry.npmjs.org/

祝你好运!


3
以下命令解决了我的问题:
npm config set proxy http://yourproxyurl.com:8080  (you need to enter your or your company proxy URL and 8080 should be replaced by your proxy port)

npm config set https-proxy http://yourproxyurl.com:8080

3

你好,我也是刚接触React,遇到了这个问题。在经过多次尝试后,我找到了解决方法:只需在命令提示符或终端中运行以下命令:

npm config set registry http://registry.npmjs.org/

这将解决你的问题。参考链接:http://blog.csdn.net/zhalcie2011/article/details/78726679


2
欢迎提供解决方案的链接,但请确保您的答案即使没有链接也是有用的:在链接周围添加上下文,以便其他用户了解它的内容和原因,然后引用您链接的页面中最相关的部分,以防目标页面不可用。仅仅提供链接的答案可能会被删除。 - GrumpyCrouton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接