安装npm包失败:"npm ERR!errno -4048"

50

我正在尝试安装一个npm包(node-xmpp-server),但是它无法安装。以前,当我尝试安装一个全局安装而不是本地安装的包时,但现在根本无法安装。我正在以管理员身份运行bash。

我运行了:

npm install node-xmpp-server

错误信息为:

npm ERR! errno -4048
npm ERR! Windows_NT 6.3.9600
npm ERR! argv "c:\\Program Files\\nodejs\\node.exe" "c:\\Program
Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "node-xmpp-server"
npm ERR! node v0.12.4
npm ERR! npm  v2.10.1
npm ERR! path c:\Users\Jaseem Abbas\Documents\node_modules\node- xmpp-server\examples
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! Error: EPERM, unlink 'c:\Users\Jaseem Abbas\Documents\node_modules\node-xmpp-server\examples'
npm ERR!     at Error (native)
npm ERR!  { [Error: EPERM, unlink 'c:\Users\Jaseem Abbas\Documents\node_modules\node-xmpp-server\examples']
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   path: 'c:\\Users\\Jaseem Abbas\\Documents\\node_modules\\node-xmpp-server\\examples' } npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! error rolling back Error: EPERM, unlink 'c:\Users\Jaseem Abbas\Documents\node_modules\node-xmpp-server\examples'
npm ERR! error rolling back     at Error (native)
npm ERR! error rolling back  { [Error: EPERM, unlink 'c:\Users\Jaseem
Abbas\Documents\node_modules\node-xmpp-server\examples']
npm ERR! error rolling back   errno: -4048,
npm ERR! error rolling back   code: 'EPERM',
npm ERR! error rolling back   path: 'c:\\Users\\Jaseem Abbas\\Documents\\node_modules\\node-xmpp-server\\examples' }

1
以管理员身份打开命令提示符,然后再试一次。 - Bidhan
@BidhanA 我正在以管理员身份运行bash。 - Vishnu Mishra
请先尝试这个: https://dev59.com/UloV5IYBdhLWcg3wL8aw#45757541 - sijo vijayan
一旦你安装了npm及其模块,只需在根目录中安装所需的内容,你的问题就会得到解决。 - Rijo
21个回答

109

结束锁定文件的进程

似乎这种错误可能是由于文件权限锁定引起的 - 当我安装whatwg-fetch时,我遇到了非常类似的问题(相同的ERRNO:-4048)。

我发现,我同时打开的Visual Studio实例正在获取它不需要的各种文件。一旦我关闭了它,安装就可以完美地进行。

在采取更激烈的措施之前,这可能是一个快速检查的可能原因...


5
这条帖子应该得到更多的赞。在我傻乎乎地卸载和重新安装 ember-cli 的时候,我忘记了我在后台运行着一个本地的 ember 服务器。这可能为我节省了数个小时的工作时间。谢谢。 - Cameron
3
哇,关闭了Visual Studio Code后,软件包安装工作了。我很好奇到底是什么导致这个问题的,因为每次想要添加新的软件包都需要关闭并重新打开VS Code让人感到麻烦。 - HaulinOats
这显然也适用于Atom IDE,所以这不仅仅是一个Visual Studio的问题,尽管我要说,在家里的Linux安装中从未见过这种情况,只有在工作中的Windows安装中才有。 - Mike
同样的问题,我在尝试npm安装时正在运行Angular服务器。我杀掉了它,立即就可以工作了。 - Tanya Branagan
在家里我可以在我的Mac上运行多个VSCode实例,但是在工作中似乎遇到了这个问题。因此,这与VS Code在Windows上处理其打开的实例有关。我使用的是Windows 7。 - Jose
我在使用WebStorm时遇到了问题,为了解决它,我不仅关闭了当前打开的项目实例,还关闭了所有的WebStorm实例。 - C0ZEN

15

如果你仍然遇到这个错误,并且你升级了 Node 版本到 5.4,那么该版本会出现错误。在这里,有一个解决方案,基本上是降级 Node 版本。

在 Windows 上将会是:

npm install -g npm@5.3

对我来说可以这样做。


9
我曾经遇到同样的问题,并找到了以下解决方案:
1.删除以下两个文件夹: - %ProgramFiles%\nodejs\npm - %ProgramFiles%\nodejs\npm.cmd
2. 进入%ProgramFiles%\nodejs\node_modules\npm,将名为npmrc的文件复制到新的npm文件夹中,该文件夹应该是%appdata%\npm\node_modules\npm。这将告诉新的npm全局安装的软件包在哪里。
3. 重新启动Windows,即可正常工作。
此方法来源于 此处(npm故障排除部分)。感谢那里的作者。

我尝试了这个方法,但对我没有用。我想我删除了一些节点文件,导致出现了这个问题,但我已经完全卸载并重新安装了节点,但仍然无法正常工作。有什么想法是出了什么问题吗? - Vishnu Mishra
仍旧出现同样的错误吗?你使用的是哪个平台和 Node 版本? - Jan_dh
窗口8.1 npm-2.13.4和node-v0.12.5 - Vishnu Mishra
在我的情况下,问题只是因为我忘记了打开某个节点模块与其他程序一起运行,关闭该程序解决了问题。我使用的是Win 8。 - Adi Prasetyo

5
似乎这个错误可能由多种原因导致,所以可能没有单一的解决方法适用于所有人。
然而,并发问题经常是安装失败的原因。根据相关npm问题线程中的积累经验,在该线程中收到了近180条评论,潜在问题是异步I/O操作之间存在竞争条件,这些操作访问硬盘上的相同文件。您可以通过清理硬盘(例如使用“npm cache verify”)或将项目移动到固态硬盘来影响它,但这并不能解决问题的根本原因。
同样地,关闭IDE或禁用病毒扫描程序有时也有效,但如果并发问题是问题的根源,这并不能真正永久解决问题。
npm 5.6.0中已经发布了补丁。根据初步报告,它似乎能够解决问题。因此,如果您的 npm--version 较低,请升级到5.6.0(或在阅读此内容时的当前版本)。
npm uninstall -g npm
npm install -g npm@5.6.0

此处所建议。

如果这没有帮助,那么可能文件锁确实是真正的原因。关闭IDE,或暂时禁用病毒扫描器,或采取类似的措施,正如@Oly在上面所说的一样。


兄弟,我运行了你的命令,但卡在了npm版本5.6.0上...每次尝试更新或删除npm时都会提示cb.apply不是一个函数...非常感谢啊。 - Andrew P.

3

我遇到了相同的问题 关闭Visual Studio后问题得到解决


3

将npm升级到5.4.2版本,可以解决这个问题。

安装命令: npm i -g npm@5.4.2 或者 npm i -g npm

如果还是不行,尝试清除缓存,使用命令npm cache clean

可以使用强制清除的方式,像这样:npm cache clean --force


1
我尝试了其他评论中提到的所有步骤。但最后,这是唯一有效的步骤。 - roney

1

我尝试着做了这件事,但它给了我一个消息,说“我真希望你知道自己在做什么”。 - Cameron

1
在我的情况下,我右键单击了出现错误的 JSON 文件,取消了只读标志,然后它就运行了。

1
对我来说,@Oly的解决方案有效,我只想补充一下给Angular用户,它是ng serve -o锁定了文件。是的-不要在运行项目的ng serve时运行npm install

0
在我的情况下,遇到了相同的问题。然后我先停止了npm run watch,再尝试一次,然后它就可以工作了。

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