O NPM não pode instalar dependências - Tente desbloquear algo que não foi bloqueado

192

Eu tenho tentado executar uma instalação npm no meu arquivo package.json, mas estou tendo muitos problemas. Ele continua dizendo "Erro: tentativa de desbloquear XXX, que não foi bloqueado" em todas as minhas dependências. Aqui está um deles:

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)

Se eu tentar executá-lo como sudo, ele parecerá mais longe e começará a instalar alguns pacotes, mas alguns novos erros aparecerão:

> 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'

Atualizei recentemente minhas instalações de nó e npm. Então, talvez isso tenha algo a ver com isso. Além disso, a maior parte do meu desenvolvimento foi no escritório e hoje estou trabalhando com VPN, então talvez isso tenha algo a ver com isso também.

Alguma ideia?

TJ Kirchner
fonte
Aqui está o arquivo package.json, se isso ajudar ... (suspiro), nvm, parece que não consigo colá-lo em muitos caracteres.
TJ Kirchner #
o que você está executando
wayne

Respostas:

421

Conforme photusenigma em: https://github.com/npm/npm/issues/4815

Execute estes comandos em uma janela de terminal (nota - NÃO substitua a parte $ USER ... é um comando linux para obter o seu usuário!):

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

... e ... se você estiver em um Mac (como eu sou) e ainda encontrar erros após executar esses comandos, execute este último e você deve ser bom. (Recomenda-se que você teste antes de executar este. Não gosto de alterar as permissões no diretório INTEIRO / usr / local, a menos que pareça realmente necessário!)

sudo chown -R $USER /usr/local
alexoviedo999
fonte
7
Trabalhou para mim obrigado! Porém, minha pasta node_modules estava em um local diferente, talvez isso ajude outra pessoa.sudo chown -R `whoami` /usr/lib/node_modules/
Justen
4
Estranhamente, recursiva chownnão alterou as permissões ~/.npm/_lockspara mim. Eu tenho o meu trabalhando executando #sudo chown -R myname ~/.npm/_locks
Sitati
7
Esteja ciente de que esta solução não é boa para plataformas multiusuário. O primeiro comando está ok, o segundo torna um usuário padrão proprietário dos arquivos do sistema. / usr / local / lib / node_modules é usado apenas pelo npm com a opção --global, que significa usar o sudo também. Infelizmente, alguns scripts de instalação usando o npm combinam comandos npm globais e não globais ... Criando essa bagunça.
Fafaman
5
Concordado, tudo que você precisa é o primeiro comando. Evite os outros, pois esses realmente não devem pertencer ao seu usuário.
Pyrospade # 02/02
2
existe uma maneira de reverter os "efeitos" da segunda linha sudo chown -R $USER /usr/local/lib/node_modules? Corri-lo antes de ler que não é uma boa idéia ..
shaneparsons
153

Trabalhei com um colega de trabalho esta tarde e descobri qual era o problema. Minha pasta ".npm" no meu diretório pessoal era de propriedade do usuário root e não de mim mesma. Não sei ao certo o que aconteceu com isso. Talvez eu tenha instalado o nó ou o npm como administrador raiz em um ponto. De qualquer forma, acabei de executar sudo chown -R [username] .npme finalmente consegui executar npm installcomandos dos meus projetos novamente!

TJ Kirchner
fonte
11
Também ajuda se você executar o mesmo comando ~/tmp/ou em qualquer local que o Node use como local temporário.
Jason
1
Obrigado pela sua resposta! Me salvou um pouco de dor de cabeça porque a mensagem de erro é ruim. Mas vou dizer que o npm deve estar fazendo isso por padrão, porque tenho certeza de que não o instalei no root. E, para ser completo, você deve chown -R <username> .npm
crowmagnumb
Ainda bem que pude ajudar :) E, boa captura! Vou modificar minha resposta para dizer isso.
TJ Kirchner
Poupança de vida! Obrigado
Matthew Cullum
21

No meu caso, o problema estava chamando o npm com um usuário que não possui um diretório HOME; portanto, por exemplo, o seguinte comando falharia:

sudo -u someUser npm install

A solução é fornecer um diretório HOME, onde someUsertenha acesso de gravação:

sudo -u someUser HOME=/some/directory npm install
Bjarke Walling
fonte
Votado porque isso realmente funcionou para mim, então parabéns e obrigado. Eu estou implantando a produção e o did't usuário ainda tem um diretório .npm (que eu poderia encontrar, pelo menos)
Stuart Watt
Funciona no ChromeOS com o usuário "chronos".
Kyle Coberly
Consegui contornar isso especificando sudo -u someUser -i, o que inicia um novo shell de logon. Eu examinei isso um pouco mais e o código de cache no npm usa a variável npm.cache, que eu acho que é o padrão $HOME/.npm/. O sudo também pode ter um comportamento diferente com o que a variável HOME é definida, dependendo da configuração e da presença ou ausência de opções de linha de comando.
jgibson
11

Teve o mesmo problema e o corrigiu alterando as persmissões conforme a resposta aceita:

sudo chown -R $USER ~/.npm

No entanto, o segundo comando deve ser evitado, pois diminui as permissões de um recurso do sistema ( sudo chown -R $USER /usr/local/lib/node_modules). Não é uma boa ideia.

Para o registro: "usr" /usr/localsignifica Recursos do sistema Unix .

chris
fonte
1
Provavelmente, este deve ser um comentário sobre a resposta aceita e não postado como uma nova resposta.
Kmeixner
O autor dessa resposta sabe disso, mas não a atualizou, então digo que uma resposta separada é muito necessária.
Gui Prá
4

Nada disso funcionou para mim. Eu tive que executar literalmente como root, fazendo o seguinte:

sudo su -
sudo npm install forever -g

Em seguida, o pacote instalado no Linux Ubuntu 14.04.

ocasional
fonte
Você realmente não deve executar o npm como root!
Antoine 'hashar' Musso
2

O comando a seguir deve corrigir problemas de permissão:

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

Você pode ler sobre outras soluções oficialmente recomendadas aqui:

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

Tim White
fonte
1

Minha solução:

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

no meu caso foi:

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

Mas eu estava tendo o mesmo problema, finalmente depois

npm cache clean

funcionou !

maionese
fonte
0

Eu tive o mesmo problema e tentei corrigir a permissão / propriedade de arquivos e diretórios relacionados ao npm por horas, mas não tive sorte com isso.

De repente, descobri que tinha um ~/.npmrcarquivo com a cacheentrada apontando para um diretório inexistente. Removida essa cachepropriedade para usar o local padrão do cache e agora está resolvida.

cheolgook
fonte
0

aviso Legal

Eu sou um usuário do Windows . No entanto, eu e minha equipe deparamos com vários problemas relacionados a erros de instalação do npm.

Problemas

A seguir, é apresentada uma lista de lições aprendidas e uma possível solução radical que sempre nos resgatou:

  1. node_modules , o diretório de instalação local npm fica protegido de modificações devido a uma falha do sistema operacional, como a incapacidade de processar caminhos com mais de 255 caracteres.
  2. Se a pasta for apagada por meio de uma ferramenta de linha de comando, ainda poderá parecer que a pasta existe no explorer que, ao tentar acessá-la, gera vários erros de permissão.
  3. Dependendo do seu antivírus e / ou gerenciador de políticas local, você poderá criar a pasta node_modules e posteriormente relegar o acesso ou as permissões a ela, resultando em vários erros de instalação.
  4. Ative os registros npm para obter mais informações sobre possíveis problemas com:

    npm install --loglevel verbose

Radical

Instale o rimraf globalmente

 npm install rimraf -g

Execute rimraf em node_modules :

rimraf yourDir/node_modules

Em seguida, tente executar:

npm install

Aviso!

Ou falta lá. Seja extremamente cuidadoso com o que segue o comando rimraf. Não há avisos, avisos, não há nada. Ele simplesmente apaga o diretório da fase da terra limpa, como se nunca estivesse lá. Tente por sua conta e risco.

Wilmer Saint
fonte