Node.js NPM无法安装依赖项-尝试解锁尚未';我没被锁上

Node.js NPM无法安装依赖项-尝试解锁尚未';我没被锁上,node.js,npm,karma-runner,Node.js,Npm,Karma Runner,我一直在尝试在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_m

我一直在尝试在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,所以这可能也与此有关


有什么想法吗?

今天下午我和一位同事一起工作,找出了问题所在。我的主目录中的“.npm”文件夹由根用户而不是我自己拥有。我不确定是什么原因造成的。也许我曾经安装过node或npm作为根管理员。无论如何,我只是运行了
sudochown-R[username].npm
,我终于能够从我的项目中再次运行
npm install
命令了

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

sudo -u someUser npm install
解决方案是提供一个主目录,其中
someUser
具有写访问权限:

sudo -u someUser HOME=/some/directory npm install
根据photusenigma网站:

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

…而且…如果您在mac上(和我一样),在运行这些命令后仍然看到错误,那么运行最后一个命令,您应该会很好。(建议您在执行此操作之前尝试测试。我不喜欢更改整个/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
文件,其中
缓存
项指向一个不存在的目录。删除了
缓存
属性以使用默认缓存位置,现在已解决该问题。

以下命令应修复权限问题:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
您可以在此处阅读其他官方推荐的解决方案:


免责声明

我是一名Windows用户。然而,我和我的团队遇到了许多关于npm安装错误的问题

问题

以下是一份经验教训清单,以及一直以来拯救我们的可能根本解决方案:

  • node\u模块npm本地安装目录因操作系统的一个缺点而受到保护,例如无法处理长度超过255个字符的路径
  • 如果使用命令行工具删除了文件夹,则该文件夹仍会显示为资源管理器中存在该文件夹,在尝试访问该文件夹时会出现许多权限错误
  • 根据您的防病毒和/或本地策略管理器的不同,您可能能够创建节点\u模块文件夹,并在以后对其进行降级访问或权限,从而导致许多安装错误
  • 启用npm日志以进一步了解以下方面可能存在的问题:

    npm安装--日志级详细信息

  • 部首

    全局安装

    节点\u模块上运行rimraf

    rimraf yourDir/node_modules
    
    然后尝试运行:

    npm install
    
    警告


    或者说没有。对命令
    rimraf
    后面的内容要格外小心。没有警告,没有提示,什么都没有。它只是将目录从地球清洁阶段删除,就好像它从未出现过一样。试试吧,风险自负。

    这是package.json文件,如果有帮助的话。。。(叹气),nvm,我似乎无法粘贴它。。字符太多。您正在运行什么操作系统如果您也在
    ~/tmp/
    或节点用作临时位置的任何位置上执行相同的命令也会有所帮助谢谢您的回答!由于错误消息不好,我省去了一些麻烦。但我会说,npm在默认情况下必须这样做,因为我很确定我自己没有在root下安装它。而且,为了完整性,你必须先吃一顿。npmGlad,我可以帮你:)而且,抓得好!我会修改我的回答说,救命!谢谢你投票,因为这确实对我有用,所以我很荣幸和感谢你。我正在部署到生产环境中,用户甚至没有一个.npm目录(无论如何,我都可以找到)在ChromeOS上与“chronos”用户一起工作。我可以通过指定
    sudo-u someUser-I
    来解决这个问题,这将启动一个新的登录shell。我进一步研究了这个问题,npm中的缓存代码使用了npm.cache变量,我猜它默认为
    $HOME/.npm/
    。sudo也可以根据配置和命令行选项的存在与否,对HOME变量的设置有不同的行为。为我工作,谢谢!我的node_modules文件夹位于另一个位置,也许这会帮助其他人
    sudo chown-R`whoami`/usr/lib/node_modules/
    奇怪的是,递归
    chown
    没有更改权限
     npm install rimraf -g
    
    rimraf yourDir/node_modules
    
    npm install