【问题标题】:npm: Unhandled rejection Error: EISDIR: illegal operation on a directory, open ‘/Users/me/.npm/_cacache/content-v2/sha512/b3/da’npm:未处理的拒绝错误:EISDIR:对目录的非法操作,打开'/Users/me/.npm/_cacache/content-v2/sha512/b3/da'
【发布时间】:2019-08-23 18:16:09
【问题描述】:

在我的 Mac 上,我刚刚将我的工作 npm 版本从 5.6 更新到了 6.9:

sudo npm i -g npm

然后我尝试像这样安装cordova:

sudo npm install -g cordova

然后得到

Unhandled rejection Error: EISDIR: illegal operation on a directory, 
open '/Users/me/.npm/_cacache/content-v2/sha512/04/89'
npm ERR! cb() never called!

npm ERR! This is an error with npm itself. Please report this error at:
npm ERR!     <https://npm.community>

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/me/.npm/_logs/2019-04-02T11_50_57_678Z-debug.log

我因此尝试降级:

sudo npm install -g npm@6.4.1

但这失败了,像这样的数百行:

npm WARN tar EISDIR: illegal operation on a directory, open '/tmp/npm-30934-a3ac319a/unpack-28da209e/bin/node-gyp-bin'
Unhandled rejection Error: EISDIR: illegal operation on a directory, open '/Users/me/.npm/_cacache/content-v2/sha512/99/72'

我还尝试确保所有权正确:

sudo chown -R $(whoami) ~/.npm

有很多关于其他目录(例如 /usr/lib/modules)的各种 EISDIR(错误是目录)问题的帖子,但似乎没有解决方案有效。

另外,npmrc 文件似乎不存在。如果我这样做:

npm config ls -l

globalconfig = "/usr/local/etc/npmrc"
userconfig = "/Users/me/.npmrc"

但两个文件都不存在。

注意,我没有自制软件,也没有那样安装(我通常手动安装)。

我也试过这个:

sudo npm cache clean -f

这没有帮助。

我还能尝试什么?我应该尝试删除 ~/.npm 目录吗?

在寻找卸载节点的方法时,我发现了许多旧帖子,其中包含很长且有时相互冲突的要删除的文件列表。不确定这是否会使情况变得更糟。

有什么建议吗?

【问题讨论】:

    标签: npm


    【解决方案1】:

    我想我已经找到了解决办法。我做了以下事情:

    1. https://nodejs.org/en/ 的 Mac pkg 安装程序安装的节点这将 npm 降级到 6.4.1,这是 EISDIR 问题明显开始之前的版本。
    2. chmod -R 777 ~/.npm/_cacache // 是的,这不好
    3. chown -R me ~/.npm/_cacache

    在此之后,我可以使用“sudo npm install -g cordova”安装cordova而不会出错。

    【讨论】:

      【解决方案2】:

      我升级到 npm 6.9.0 时遇到了同样的问题。您必须将节点升级到最新版本:

      brew重新安装节点

      此时我已经安装了 Mac OS Mojave 的最新可用版本(节点:v11.14.0 和 npm 6.9.0)。

      节点升级后,我又可以全局安装包了。

      【讨论】:

      • nvm install node 为我修复了它(同时从 6.9.0 降级到 6.7.0)
      • 谢谢你为我做的——我遵循了这么多的答案,但这个是为我做的!
      【解决方案3】:

      更改文件的所有权,然后避免使用 sudo 是使用 sudo 进行全局安装的 EISDIR 的一种可能解决方法。我想你已经安装到默认位置文件夹:

      sudo chown -R <user> ~/.npm
      
      sudo chown -R <user> /usr/local/lib
      
      sudo chown -R <user> /usr/local/bin
      

      在这个序列之后,它对我有用。

      【讨论】:

        猜你喜欢
        • 2019-08-10
        • 2019-06-29
        • 1970-01-01
        • 2019-09-24
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多