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

TJ *_*ner 192 node.js npm karma-runner

我一直在尝试在我的package.json文件上运行npm install,但是我遇到了很多麻烦.它一直说"错误:尝试解锁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)
Run Code Online (Sandbox Code Playgroud)

如果我尝试将其作为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'
Run Code Online (Sandbox Code Playgroud)

我最近更新了我的节点和npm安装.所以也许这与它有关.此外,我的大部分开发都在办公室,今天我正在使用VPN,所以也许这与它有关.

有任何想法吗?

ale*_*999 421

根据photusenigma:https://github.com/npm/npm/issues/4815

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

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

......并且...如果你在Mac上(比如我),并且在运行这些命令后仍然看到错误,那么运行最后一个,你应该很好.(建议您在执行此操作之前先尝试测试.我不喜欢更改ENTIRE/usr/local目录的权限,除非真的有必要!)

sudo chown -R $USER /usr/local
Run Code Online (Sandbox Code Playgroud)

  • 为我工作谢谢!虽然我的node_modules文件夹位于不同的位置,也许这​​会帮助别人```sudo chown -R`whoami`/usr/lib/node_modules /``` (7认同)
  • 请注意,此解决方案对于多用户平台并不好用.第一个命令是ok,第二个命令是系统文件的标准用户所有者./ usr/local/lib/node_modules仅由npm和--global选项一起使用,这意味着也使用sudo.不幸的是,一些使用npm的安装脚本混合了全局和非全局npm命令......创建这个混乱. (7认同)
  • 同意,你需要的只是第一个命令.避免使用其他用户,因为用户不应该拥有这些用户. (5认同)
  • 奇怪的是,递归`chown`没有为我改变`〜/ .npm/_locks`的权限.我通过运行`sudo chown -R myname~/.npm/_locks`让我的工作 (4认同)
  • 有没有办法扭转第二行`sudo chown -R $ USER/usr/local/lib/node_modules`的"效果"?我在阅读之前跑了它,这不是一个好主意.. (2认同)

TJ *_*ner 153

我今天下午和同事一起工作,弄清楚问题是什么.我的主目录中的".npm"文件夹由root用户而不是我自己拥有.我不确定是什么原因引起的.也许我一度安装了node或npm作为root管理员.无论如何我只是跑了sudo chown -R [username] .npm,我终于能够npm install再次从我的项目中运行命令!

  • 如果你在`〜/ tmp /`上执行相同的命令,或者Node用作临时位置的任何位置,它也会有帮助 (11认同)

小智 21

在我的情况下,问题是使用没有HOME目录的用户调用npm,因此例如以下命令将失败:

sudo -u someUser npm install
Run Code Online (Sandbox Code Playgroud)

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

sudo -u someUser HOME=/some/directory npm install
Run Code Online (Sandbox Code Playgroud)


chr*_*ris 11

有相同的问题并通过根据接受的答案更改持久性来修复它:

sudo chown -R $USER ~/.npm
Run Code Online (Sandbox Code Playgroud)

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

记录:"usr" /usr/local代表Unix系统资源.