erros de instalação do npm com Erro: ENOENT, chmod

128

Estou tentando instalar globalmente um módulo npm que acabei de publicar. Sempre que tento instalar, a partir do npm ou da pasta, recebo esse erro.

npm ERR! Error: ENOENT, chmod '/usr/local/lib/node_modules/takeapeek/lib/cmd.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.8.0-19-generic
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "takeapeek"
npm ERR! cwd /home/giodamlio
npm ERR! node -v v0.10.6
npm ERR! npm -v 1.3.6
npm ERR! path /usr/local/lib/node_modules/takeapeek/lib/cmd.js
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/giodamlio/npm-debug.log
npm ERR! not ok code 0

Estou usando o sudo e verifiquei três vezes tudo no pacote, tudo deve funcionar. Pesquisei ao redor e vi alguns casos de simulação, nenhum dos quais foi resolvido. Aqui está o que eu tentei.

  • Atualizar npm (sudo npm install -g npm )
  • Limpe o cache npm global (sudo npm cache clear )
  • Limpe o cache npm do usuário (npm cache clear )

Notei que o erro tinha a ver com o arquivo que estou vinculando ao caminho, especificamente quando o npm tentou fazer um chmod. Isso não deveria ser um problema, meulib/cli.js possui permissões normais e o npm possui permissões de superusuário durante esta instalação.

Depois de pesquisar nos documentos do npm, encontrei uma opção que impediria o npm de criar os links bin (--no-bin-links ); quando tentei instalar com ele, funcionou bem.

Então, qual é o problema? Isso é algum bug estranho de franja que ainda não tem solução?

Edit: Para referência, aqui está o módulo que eu enviei

giodamelio
fonte
seu pacote está usando o node-gyp? Eu acho que a chamada no-bin-links está relacionada, se assim for.
Jcollum
Não, nenhum código nativo no módulo. Aqui está a fonte do módulo para referência.
Giodamelio 1/08
1
O --no-bin-linksapenas interrompe o npm de vincular arquivos no binhash do package.json ao caminho na instalação global.
Giodamelio
Argh, eu definitivamente já me deparei com isso antes, mas não me lembro por que ... avisarei se surgir na minha cabeça.
Jcollum
@jcollum Obrigado, é realmente muito frustrante, eu verifiquei tudo um bilhão de vezes, mas ainda não consigo deixar de sentir que perdi algo simples e estúpido. Isso ou talvez seja algum bug estranho.
Giodamelio

Respostas:

133

Ok, parece que o NPM está usando o seu .gitignorecomo base para o .npmignorearquivo e, portanto, ignora /lib. Se você adicionar um espaço em branco.npmignore arquivo em à raiz do seu aplicativo, tudo deverá funcionar.

[editar] - mais informações sobre esse comportamento aqui: https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package

badsyntax
fonte
Droga, deve ser isso. Parece uma maneira meio confusa de fazer as coisas. Agora não estou em um computador, mas tentarei em algumas horas.
giodamelio
3
Três horas de frustração se resumiram a uma linha no meu .gitignore que estava enlouquecendo com a instalação do npm -g. Insano.
Bryan2 /
2
'type NUL> .npmignore' para windows
Kabir
1
A partir do npm @ 5, o cache do npm se recupera automaticamente de problemas de corrupção e os dados extraídos do cache são válidos. Se você quiser garantir que tudo esteja consistente, use 'npm cache Verifique'.
Abhijeet 23/03
1
remover o arquivo package-lock.json
FennRussel 31/07/19
107

Eu tive um problema semelhante,

npm cache clean

Resolvi-o.

Genjuro
fonte
11
Eu tentei npm cache verifye funcionou. obrigado pela dica.
Jaikrat
A partir do npm @ 5, o cache do npm se recupera automaticamente de problemas de corrupção e os dados extraídos do cache são válidos. Se você quiser garantir que tudo esteja consistente, use 'npm cache Verifique'. Por outro lado, se você estiver depurando um problema com o instalador, poderá npm install --cache /tmp/empty-cacheusar um cache temporário em vez de neutralizar o real.
Daniel ZA
9

De algum modo, esse problema surgiu para mim no Mac quando eu estava tentando executar npm install -g bower. Isso estava me dando uma série de erros por não conseguir encontrar coisas como graceful-fs. Não tenho certeza de como instalei o npm originalmente, mas parece que ele veio com o nó usando homebrew. Eu corri pela primeira vez

brew uninstall node

Isso removeu ambos nodee npmdo meu caminho. A partir daí, eu apenas reinstalei

brew install node

Quando se completou eu tinha nodee npmno meu caminho e eu era capaz de correr

rm -rf ~/.npm
npm install -g bower

Este, então, foi instalado com sucesso.

Atualizar as fórmulas de preparação e atualizar as instalações não pareceu funcionar para mim, não sei por que. A remoção da .npmpasta foi algo que funcionou para outras pessoas, e eu tentei sem sucesso. Eu fiz desta vez apenas por precaução. Observe também que nenhum dos itens a seguir resolveu o problema para mim, embora o tenha feito para outros:

npm cache clean
sudo npm cache clean
user1978019
fonte
9

Eu estava recebendo esse erro na instalação do npm e a adição do .npmignore não o solucionou.

Erro: ENOENT, stat 'C: \ Usuários \ MeuNome_de_Usuário \ AppData \ Roaming \ npm'

Tentei ir para a pasta mencionada e ela não existia. O erro foi corrigido quando criei a pasta npm na pasta Roaming .

Isso está no Windows 8.1

Vijay Vepakomma
fonte
4

Eu tive o mesmo problema e encontrei uma manipulação não mencionada aqui. Embora eu contribuísse para a comunidade:

npm install -g myappnão estava copiando o bindiretório. Eu achei que era porque eu não o incluí filesno meupackage.json

"files": [
  "lib",
  "bin" // this was missing
]
dthree
fonte
Tenho o mesmo problema e essa resposta foi a única solução boa para mim. O motivo foi que eu peguei a fileschave na minha package.jsoncom algumas entradas como index.jse LICENSE, mas não a binpasta. Portanto, funciona se não houver nenhuma fileschave ou se houver uma fileschave E a binpasta em.
Rémi Becheras 22/03
Obrigado, isso me ajudou a me soltar. Depois que você apontou que o diretório bin não estava incluído nos arquivos, pensei "oh! Claro!". Depois voltei aos documentos para ver se havia perdido e isso não foi mencionado (pelo menos não no post do blog da NPM que eu estava lendo). Pelo menos eu não sou louco: P. Obrigado pela ajuda!
22417 Chris Schmitz
4

Eu estava recebendo um erro semelhante npm installem uma instalação local:

npm ERR! enoent ENOENT: no such file or directory, stat '[path/to/local/installation]/node_modules/grunt-contrib-jst'

Não sei ao certo o que estava causando o erro, mas recentemente instalei alguns novos módulos de nó localmente, atualizei o nó com homebrew e executei 'npm update -g'.

A única maneira de resolver o problema foi excluir o diretório local node_modules por inteiro e executar npm installnovamente:

cd [path/to/local/installation]
npm rm -rdf node_modules
npm install
g.carey
fonte
4

Eu tenho um problema semelhante especificamente: ERR! enoent ENOENT: não existe esse arquivo ou diretório, chmod 'node_modules / npm / node_modules / request / node_modules / http-signature / node_modules / sshpk / bin / sshpk-conv Tentei todas as soluções acima, mas sem sorte. Eu estava usando a caixa vagrant, e o projeto estava em uma pasta compartilhada. Os problemas parecem estar lá apenas, quando movo o projeto para outra pasta não compartilhada (woth host), pronto! problema resolvido. Apenas no caso de outra pessoa estar usando também vagabundo

joaco1977
fonte
Você me acordou de um pesadelo, tnx! Eu tenho duas adições: 1.) Pare de usar o npm, use Yarn. 2.) Execute o npm da sua máquina HOST e não da VM.
Flip Vernooij
3

Recebi uma mensagem de erro semelhante ao tentar npm installum monte de dependências. Acontece que alguns deles não conseguem instalar no Debian / Ubuntu porque esperam /usr/bin/nodeser o nó executável. Para corrigir, você precisa fazer

sudo ln -s nodejs /usr/bin/node 

ou melhor ainda,

sudo apt-get install nodejs-legacy

Para mais informações: https://stackoverflow.com/a/21171188/7581

itsadok
fonte
3

Encontrei um comportamento semelhante após a atualização para o npm 6.1.0. Pareceu funcionar uma vez, mas entrei em um estado com esse erro ao tentar instalar um pacote que foi especificado por path no sistema de arquivos:

npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename

O seguinte não resolveu o problema :

  • rm -rf node_modules
  • npm cache clean(deu npm ERR! As of npm@5, the npm cache self-heals.... use 'npm cache verify' instead.)
  • npm cache verify
  • rm -rf ~/.npm

Como resolvi o problema :

  • rm package-lock.json
Ian
fonte
2

Acho que seu script de café compilado está ausente do pacote npm publicado. Tente escrever um comando de pré - publicação .

margem de manobra
fonte
Não, a pasta lib estava lá quando a publiquei. Além disso, recebo o mesmo erro ao tentar instalar a partir da pasta local. Mesmo quando a pasta lib está lá.
giodamelio
1
@giodamelio Concordo com o Ryan neste. O erro está dizendo takeapeek/lib/cmd.jsque não existe. Mesmo que a pasta lib possa estar 'lá' quando você publicar, ela não estará 'lá' quando você instalar via npm, a menos que faça parte do repositório ou que você use a pré-publicação para criá-lo.
badsyntax
2

No meu caso (código múltiplo ENOENT errno 34), o problema estava no ~/.npm/acesso ao diretório. Dentro dele, havia alguns subdiretórios com root:rootdireitos, que estavam causando problemas enquanto eu executava comandos como usuário normal (sem sudo). Então, mudei a propriedade de todos os subdiretórios e arquivos dentro de ~/.npm/dir no meu usuário e grupo local. Isso fez o truque no meu Ubuntu (no Mac também deve funcionar).

$ sudo chown yourusername.yourgroupname ~/.npm/ -R

Você deve saber seu nome de usuário, certo? Se não, execute $ whoamie substitua também o nome do seu grupo, assim:

$ sudo chown johnb.johnb ~/.npm/ -R

EDITAR:

Caso de teste :

Na minha conta local, /home/johnbinstalei npm globalmente algum gerador para yeoman, como este:

$ sudo npm install -g generator-laravel

Natureza do problema :

A ação acima fez com que algumas dependências fossem instaladas dentro do ~/.npm/dir, possuindo root:rootpropriedade (por causa de sudo ...). Evidentemente, o npm não é executado como usuário local (ou as dependências de alteração subdividem a propriedade posteriormente) ao extrair dependências e gravá-las em um subdiretório do usuário local ~/.npm/. Desde que o npm seja tão descuidado em relação a questões fundamentais de segurança do sistema de arquivos unix, o problema ocorrerá novamente.

Solução :

  1. Verifique continuamente se há ~/.npm/subdiretórios com propriedade (e / ou permissões) diferentes da sua conta de usuário local, especialmente quando você instala ou atualiza algo com sodo(raiz). Nesse caso, altere a propriedade interna ~/.npm/para um usuário local recursivamente.

  2. Peça à npm, bower, grunt, ...comunidade que eles resolvam esse problema como eu o descrevi acima.

clipe de papel
fonte
2

Eu recebi esse erro ao tentar instalar um plug-in grunt. descobri que tinha uma versão desatualizada do npm e o erro desapareceu após a atualização do npm para a versão mais recente

npm install -g npm
Prabhu Murthy
fonte
1

Eu tentei todas as coisas que encontrei na rede ( npm cache cleare rm -rf ~/.npm), mas nada parece funcionar. O que resolveu o problema foi a atualização do nó (e npm) para a versão mais recente. Tente isso.

Nikola M.
fonte
1

No Windows, tive um erro semelhante. Pesquise e cole Dados do aplicativo e procure a string npm.

Substituí a string 'npm'(incluindo aspas) por 'npm.cmd'in atlasboard\lib\package-dependency-manager.jse atlasboard\lib\cli\commands.js. Isso resolveu o problema.

Vinicius Carvalho
fonte
1

O mesmo erro durante a instalação global ( npm install -g mymodule) para o pacote com um script não existente.

No package.json:

    ...
    "bin": {
      "module": "./bin/module"
    },
    ...

Mas o ./bin/modulenão existia, como foi nomeado modulejs.

hg.
fonte
1
  1. Instale a versão mais recente do nó
  2. Execução: cache npm limpo
  3. Execute: npm install cordova -g
Dilhan Jayathilake
fonte
1

Você pode obter esse erro se o seu node.js também estiver corrompido. Corrigi esse erro desinstalando / reiniciando / instalando o node.js completamente e o erro foi corrigido, juntamente com os outros três erros misteriosos lançados.

LAdams87
fonte
1

Cuidado com valores inválidos para as chaves "diretórios" e "arquivos" em package.json

Se você inicia com um novo aplicativo e deseja iniciar completamente em branco, é necessário iniciar em uma pasta vazia completa ou ter um arquivo package.json válido.

Se você não deseja criar um arquivo package.json primeiro, digite: npm i some_package

O pacote com o nome "some_package" deve ser instalado corretamente em uma nova subpasta "node_modules".

Se você criar um arquivo package.json primeiro, digite: npm init Mantenha todos os padrões (apenas clicando em ENTER), você deve terminar com um arquivo válido.

Deve ficar assim:

{
  "name": "yourfoldername",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Observe que as seguintes chaves estão ausentes: " diretórios ", " repositório " e " arquivos ". Parece que se você usar valores incorretos para " diretórios " e / ou " arquivos ", não poderá instalar o pacote. Deixando essas chaves, resolvi o problema para mim.

Observe também a tecla " main ". Este está presente, mas contém um valor inválido. Nenhum arquivo "index.js" existe (ainda). Você pode removê-lo com segurança.

Agora digite: npm i some_package e o pacote com o nome "some_package" deve ser instalado corretamente em uma nova subpasta "node_modules".

RWC
fonte
1

Tentei quase tudo, então finalmente isso:

Simplesmente remova node_modules e execute 'npm install'novamente

Alex Stephens
fonte
0

Eu tive um problema semelhante com uma causa diferente: o yo nodegerador foi adicionado "files": ["lib/"]ao meu package.jsone, como cli.jsestava fora do lib/diretório, ele foi ignorado ao publicar no npm.

(Problema da Yeoman em https://github.com/yeoman/generator-node/issues/63, isso deve ser corrigido em breve.)

Nathan Friedly
fonte
0

Eu estava recebendo o erro "Erro: ENOENT, stat 'C: \ Users \ nome_do_usuário \ AppData \ Roaming \ npm'. Mas não havia esse diretório. Criou o diretório e a instalação do npm começou a funcionar

k.iyengar
fonte
0

Recentemente, atualizei para o nó 4.2.1 em uma máquina Windows 7 x64. Ao executar

npm install -g bower

Eu recebi um erro semelhante:

npm ERR! enoent ENOENT: não existe esse arquivo ou diretório, abra 'C: \ Users \ THE_USERNAME \ AppData \ Local \ Temp \ npm-THE_HASH'

Pensando que estava relacionado ao caminho do AppData, brinquei com

npm config edit

e

npm config edit --global

para alterar os campos prefixo, cache e tmp, mas recebeu o mesmo erro com os novos caminhos:

npm ERR! enoent ENOENT: não existe esse arquivo ou diretório, abra 'C: \ Users \ THE_USERNAME \ npm-temp \ npm-THE_HASH'

Todos os comandos foram executados como administrador, então eu tinha permissões totais.

Então, pensei que havia alguns problemas com os arquivos existentes, então executei:

npm cache clean

Mas tenho o mesmo erro. No entanto, ainda havia alguns arquivos temporários por aí. A remoção manual de todos os dados temporários com cygwin finalmente corrigiu o problema para mim:

rm -rf bower bower.cmd node_modules etc

Se você tiver apenas o cmd do Windows, poderá usar algo como

rmdir /S THE_TEMP_DIR

remover todos os subdiretórios (embora se você tiver dependências de nós profundamente aninhadas, isso é notoriamente problemático)

Portanto, talvez haja alguns problemas com a atualização do npm e com versões do bower ou outros pacotes por aí. No meu caso, esse parecia ser o problema

Andrew Johnston
fonte
0

Ao instalar o iônico, fiquei abaixo do erro

115648 erro enoent ENOENT: não existe esse arquivo ou diretório, renomeie 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules.staging \ ansi-b11f0c4b' -> 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules \ ionic \ node_modules \ cordova-lib \ node_modules \ ansi '

Não havia nenhuma pasta chamada ansinesse caminho. Eu criei lá e ele foi instalado corretamente.

Vijay Mishra
fonte
0

Se você tentou "fazer a instalação" no diretório do projeto com este erro, tente:

rm -rf ./node_modules
npm cache clear
npm remove sails

então você pode tentar "fazer a instalação"

Se você tiver o "npm ERR! Enoent ENOENT: esse arquivo ou diretório, chmod '... / djam-backend / node_modules / js-beautify / js / bin / css-beautify.js'", poderá tentar instalar alguma versão anterior do js-beautify, mais comentários: https://github.com/beautify-web/js-beautify/issues/1247

"dependencies": {
  ...
  "js-beautify": "1.6.14"
  ...
}

e a execução "make install". Parece funcionar caso você não tenha outras dependências que exijam a versão superior (1.7.0). Nesse caso, você deve fazer o downgrade desses pacotes também no packages.json.

ou

Alex
fonte
0

Nenhuma das opções acima funcionou para mim. Mas yarn installtrabalhou, depois npm icomeçou a trabalhar. Não tenho certeza de que fio consertou, mas solução rápida e fácil!

Todd Hale
fonte
0

Primeiro faça

 npm rm -rdf node_modules

então faça

npm install

Depois disso, instale os arquivos que você deseja adicionar

Shreyash Shetty
fonte
0

Ocorreu um erro semelhante ao npm em um contêiner do docker para o webpack. O problema foi causado pelo argumento da linha de comando --user da execução do docker, porque o usuário e o grupo especificados lá de alguma forma interferiram nos direitos do volume local. Espero que isso ajude alguém :)

Hajo
fonte
-3
Creating a new React app in C:\Users\CM\Downloads\react\github-profile.
Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts...

npm ERR! path C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 

v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335b1
0893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806

npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall lstat
npm ERR! Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6
5545008a3cad93d00f806'
npm ERR! { [Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1f 
a335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6554500
8a3cad93d00f806']

npm ERR! cause:
npm ERR! { Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1
fa335b10893d67f7339e4 
af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806'
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 


npm ERR! stack:
npm ERR! 'Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015
eec65545008a3cad93d00f806'',
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335
b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93
d00f806',
npm ERR! parent: 'postcss-image-set-function' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a
text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double- 
check thenpm ERR! permissions of the file and its containing directories, or 
try  running

npm ERR! the command again as root/Administrator (though this is not 
recommended).
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\CM\AppData\Roaming\npm-cache_logs\2019-03-22T10_
27_19_722Z-debug.log


Aborting installation.
npm install --save --save-exact --loglevel error react react-dom react- 
scripts   has failed.

Deleting generated file... node_modules
Deleting generated file... package.json
Deleting GitHub-profile/ from C:\Users\CM\Downloads\reactDone.``

Eu estava enfrentando erro semelhante, mas tentei executar o comando create-react-app muitas vezes e, finalmente, ele foi criado. Esse era o problema da minha conexão com a Internet. verifique sua conexão com a internet

chandra mohan
fonte
-16

Por favor tente isto

SET HTTP_PROXY=<proxy_name>

Em seguida, tente esse comando.

user3030233
fonte
onde eu coloco isso?
eduardosufan