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


192

我一直在尝试在我的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,所以也许与此有关。

有任何想法吗?


这是package.json文件,如果有帮助...(叹气),nvm,我似乎无法将其粘贴..太多字符。
TJ Kirchner 2014年

您在运行什么操作系统
韦恩2014年

Answers:


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

...并且...如果您使用的是Mac(如我),则在运行这些命令后仍然看到错误,请运行最后一个,您应该会很好。(建议您在进行此操作之前先进行测试。除非确实有必要,否则我不喜欢更改ENTIRE / usr / local目录的权限!)

sudo chown -R $USER /usr/local

7
为我工作了谢谢!我的node_modules文件夹位于其他位置,也许这​​会对其他人有所帮助sudo chown -R `whoami` /usr/lib/node_modules/
Justen 2014年

4
奇怪的是,递归chown并没有改变~/.npm/_locks我的权限。我有我的工作运行sudo chown -R myname ~/.npm/_locks
Sitati

7
请注意,此解决方案不适用于多用户平台。第一个命令确定,第二个命令使系统文件成为标准用户所有者。/ usr / local / lib / node_modules仅由带有--global选项的npm使用,这意味着也使用sudo。不幸的是,一些使用npm的安装脚本同时使用了全局和非全局npm命令。
Fafaman 2014年

5
同意,您只需要第一个命令。避免其他人,因为那些人​​不该归您的用户所有。
pyrospade

2
有没有办法扭转第二行的“影响” sudo chown -R $USER /usr/local/lib/node_modules?我读这不是一个好主意之前跑了..
shaneparsons

153

今天下午我和一位同事一起工作,弄清了问题所在。我的主目录中的“ .npm”文件夹归root用户所有,而不是我自己。我不确定是什么原因导致的。也许我一次安装了node或npm作为根管理员。无论如何,我都运行了sudo chown -R [username] .npm,终于可以npm install再次从项目中运行命令了!


11
如果您还执行相同的命令~/tmp/,或者Node用作临时位置的任何位置,这也会有所帮助
Jason 2014年

1
谢谢您的回答!由于错误消息不正确,使我免于头痛。但是我要说的是,npm必须默认执行此操作,因为我很确定自己没有以root身份安装它。并且,为了完整起见,您必须使用-R <用户名> .npm
crowmagnumb 2014年

很高兴我可以提供帮助:)而且,很好!我会修改我的回答,这样说。
TJ Kirchner 2014年

救生员!谢谢
马修·卡勒姆

21

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

sudo -u someUser npm install

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

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

表示支持,因为这确实对我有用,因此表示感谢。我正在部署到生产环境,用户甚至没有一个.npm目录(无论如何我都可以找到)
Stuart Watt

在ChromeOS上与“ chronos”用户一起使用。
凯尔·科伯利

我可以通过指定解决此问题sudo -u someUser -i,这将启动一个新的登录Shell。我对此进行了进一步研究,npm中的缓存代码使用了npm.cache变量,我猜默认为$HOME/.npm/。sudo的行为也可能与HOME变量的设置不同,具体取决于配置以及命令行选项的存在与否。
jgibson 2015年

11

遇到了相同的问题,并通过根据公认的答案更改权限来解决此问题:

sudo chown -R $USER ~/.npm

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

备案:在“USR” /usr/local代表的Unix系统资源


1
这可能应该是对已接受答案的评论,而不是作为新答案发布。
Kmeixner 2015年

该答案的作者知道这一点,但尚未更新其答案,因此我说有必要单独提出一个。
GuiPrá15年

4

这些都不适合我。通过执行以下操作,我必须以root身份运行:

sudo su -
sudo npm install forever -g

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


您实际上不应该以root用户身份运行npm!
Antoine'hashar'Musso


1

我的解决方案:

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

就我而言是:

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

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

npm cache clean

有效 !


0

我遇到了同样的问题,试图修复与npm相关的文件和目录的权限/所有权达数小时之久但运气不佳。

突然,我发现~/.npmrc文件中包含cache指向不存在的目录的条目。删除了该cache属性以使用默认缓存位置,现在已解决。


0

免责声明

我是Windows用户。但是,我和我的团队遇到了许多有关npm安装错误的问题。

问题

以下是汲取的经验教训以及可能一直为我们解脱的可能的根本解决方案:

  1. node_modules,由于操作系统的缺陷(例如,无法处理长度超过255个字符的操作系统),npm本地安装目录变得不受修改。
  2. 如果通过命令行工具删除了该文件夹,则该文件夹可能仍显示为该文件夹存在于资源管理器中,当尝试访问该文件夹时会出现许多权限错误。
  3. 根据您的防病毒软件和/或本地策略管理器,您也许可以创建node_modules文件夹,然后再放权对其进行访问或使用权限,从而导致许多安装错误。
  4. 启用npm日志可进一步了解以下问题:

    npm install --loglevel verbose

激进

全局安装rimraf

 npm install rimraf -g

在node_modules上运行rimraf

rimraf yourDir/node_modules

然后尝试运行:

npm install

警告!

或缺乏那里。请特别注意该命令后面的内容rimraf。没有警告,没有提示,什么也没有。它只是从地球清理的阶段删除该目录,就好像它从来没有出现过一样。试试看,后果自负。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.