NPM 无法安装依赖项-尝试解锁尚未锁定的内容

我一直试图在 package.json 文件上运行 npm 安装,但是遇到了很多麻烦。它一直在说“错误: 尝试解锁 XXX,它没有被锁定”对我的所有依赖。这是其中之一:

Error: Attempt to unlock tbd@~0.6.4, which hasn't been locked
at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1304:11)
at cb (/usr/local/lib/node_modules/npm/lib/cache.js:646:5)
at /usr/local/lib/node_modules/npm/lib/cache.js:655:20
at /usr/local/lib/node_modules/npm/lib/cache.js:1290:7
at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
at Object.oncomplete (fs.js:107:15)

如果我尝试以 sudo 的方式运行它,它似乎会更进一步,开始安装一些软件包,但是一些新的错误会弹出来:

> chokidar@0.8.1 postinstall /Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/chokidar
> node setup-deps.js


shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied


node.js:811
var cwd = process.cwd();
^
Error: EACCES, permission denied
at Function.startup.resolveArgv0 (node.js:811:23)
at startup (node.js:58:13)
at node.js:902:3
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q'
npm ERR! error rolling back  karma@0.10.9 { [Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q' }
npm ERR! Error: ENOENT, chown '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/socket.io/lib/socket.io.js'

我最近更新了我的节点和 npm 安装。所以可能跟这个有关系。另外,我的大部分开发都是在办公室进行的,今天我正在使用 VPN,所以这可能也与 VPN 有关。

有什么想法吗?

72371 次浏览

今天下午我和一个同事一起工作,找出了问题所在。我的”。我主目录中的 npm”文件夹由 root 用户而不是我自己所拥有。我不知道是怎么回事。也许我曾经安装了 node 或 npm 作为根管理员。在任何情况下,我只是运行 sudo chown -R [username] .npm,我终于能够再次从我的项目运行 npm install命令!

在我的例子中,问题是对没有 HOME 目录的用户调用 npm,因此下面的命令会失败:

sudo -u someUser npm install

解决方案是提供一个 HOME 目录,其中 someUser具有写访问权限:

sudo -u someUser HOME=/some/directory npm install

根据光之谜: https://github.com/npm/npm/issues/4815

在终端窗口中运行这些命令(注意-不要替换 $USER 部分... 这是一个 Linux 命令来获取用户!):

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

还有... ... 如果您使用的是 Mac (就像我一样) ,并且在运行这些命令之后仍然看到错误,那么运行最后一个命令,您应该就没问题了。(建议您在进行这项测试之前进行测试。我不喜欢更改 ENTIRE/usr/local 目录的权限,除非真的有必要!)

sudo chown -R $USER /usr/local

这些对我来说都不起作用,我必须以 root 用户的身份执行以下操作:

sudo su -
sudo npm install forever -g

然后安装在 Linux Ubuntu 14.04上的软件包。

遇到同样的问题,并根据公认的答案修改了许可证,从而解决了这个问题:

sudo chown -R $USER ~/.npm

但是,应该避免使用第二个命令,因为它会降低系统资源(sudo chown -R $USER /usr/local/lib/node_modules)的权限。这不是个好主意。

正式声明: /usr/local中的“ usr”代表 Unix 系统资源

我的解决办法是:

sudo chown -R $USER /usr/local/lib/node_modules/NAMEOFMODULE

我的情况是:

sudo chown -R $USER /usr/local/lib/node_modules/appium/

但最后我也遇到了同样的问题

npm cache clean

成功了!

我遇到了同样的问题,并试图修复 npm 相关文件和目录 好几个小时的权限/所有权,但是没有成功。

突然,我发现 ~/.npmrc文件中的 cache条目指向一个不存在的目录。删除了使用默认缓存位置的 cache属性,现在解决了这个问题。

下面的命令应该修复权限问题:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

你可以在这里阅读另一个官方推荐的解决方案:

https://docs.npmjs.com/getting-started/fixing-npm-permissions

免责声明

我是 < em > 视窗 用户。但是,我的团队和我遇到了许多关于 npm 安装错误的问题。

问题

以下是吸取的经验教训和一个始终拯救我们的可能的根本解决办法:

  1. Node _ moduleNpm本地安装目录由于操作系统的一个缺点(例如不能处理比 255字符长的路径)而受到保护,不会受到修改。
  2. 如果文件夹通过命令行工具被擦除,它可能仍然看起来好像文件夹存在于资源管理器中,当尝试访问它时会出现许多权限错误。
  3. 根据您的防病毒和/或本地策略管理器,您可以创建 Node _ module文件夹,然后降级对它的访问或权限,从而导致许多安装错误。
  4. 启用 npm 日志以进一步了解可能出现的问题:

    npm install --loglevel verbose

激进

全局安装 Rimraf

 npm install rimraf -g

Node _ module频道播放 Rimraf:

rimraf yourDir/node_modules

然后试着跑步:

npm install

警告!

或者缺少。对于遵循命令 rimraf的内容要非常小心。没有警告,没有提示,什么都没有。它只是从地球的清洁阶段擦除目录,好像它从来没有存在过。试试看,后果自负。

对我来说,它是我的代理... ... 并确保删除包锁定。 json。 这在我的基于 Mac/unix 的系统上很管用:

npm config rm proxy
npm config rm https-proxy
npm config delete proxy
npm config delete https-proxy
npm config --global rm proxy
npm config --global rm https-proxy
npm config set registry "http://registry.npmjs.org"
npm config set strict-ssl false


npm install


run: scutil --proxy

你应该拿到字典清单。

然后从列表中得到这些值:

HTTPProxy : 127.0.0.1 HTTPPort : 8118

然后将它们包含在这个命令中:

npm config set proxy http://127.0.0.1:8119

然后包括:

npm config set https-proxy https://123.0.0.1:8118

参考资料: https://www.sneppets.com/angular/how-to-make-npm-install-command-to-work-behind-proxy/