npm install <module> erro persistente?(construção do nó-gyp?)
-
22-12-2019 - |
Pergunta
Eu tento instalar o jsdom assim:
$ sudo npm install -g jsdom
# OR
$ sudo npm install jsdom
Após algum comando bem-sucedido, a instalação falha rapidamente, com a primeira mensagem de erro após o [....]
:
$ sudo npm install jsdom
npm http GET https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/jsdom
[....]
> contextify@0.1.7 install /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify
> node-gyp rebuild
gyp: /home/yug/.node-gyp/0.10.25/common.gypi not found (cwd: /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify) while reading includes of binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:337:16)
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:797:12)
gyp ERR! System Linux 3.8.0-35-generic
gyp ERR! command "node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify
gyp ERR! node -v v0.10.25
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok
npm http 304 https://registry.npmjs.org/domhandler
npm http 304 https://registry.npmjs.org/domelementtype
npm ERR! contextify@0.1.7 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the contextify@0.1.7 install script.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls contextify
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 3.8.0-35-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "jsdom"
npm ERR! cwd /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.24
npm ERR! code ELIFECYCLE
npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/entities
....
Dica?Este bug também aparece para outros módulos:
$sudo npm install -g topojson
#bug with `contextify@0.1.7 install` error as well.
Como consertar isso?
Editar: tentei sudo apt-get remove --purge nodejs npm topojson
em seguida, reinstalando de várias maneiras. Mesmo quando nodejs
a reinstalação foi bem-sucedida, o erro permanece, então acho que é bastante contextual (node.gyp
? cwd
?...).Remover/reinstalar maneiras tentadas:
- ubuntu_setup.sh
- com URL nativo desatualizado
- com URL atualizado para https://github.com/joyent/node.git,
sudo add-apt-repository ppa:chris-lea/node.js
,- e feito à mão
git clone https://github.com/joyent/node.git
(teste cancelado) - usando várias outras maneiras :
- caminho 1:indo
Solução 2
Parece que encontrei uma maneira de excluir cuidadosamente todos os arquivos e pastas relacionados ao nó do meu computador.
0.Contexto: Anteriormente, fiz várias limpezas de console sem sucesso, com
sudo apt-get remove --purge nodejs npm topojson
seguido por cerca de 3 maneiras diferentes de reinstalar nodejs
.Tentei CADA maneira, desde a limpeza até a reinstalação, entre 2 e 4 vezes.
1.Purga terminal: Vamos primeiro limpar minha bagunça da maneira mais profunda possível:
npm cache clean; bower cache clean; grunt clean;
sudo apt-get remove --purge nodejs npm topojson
No entanto, acabei de notar que esta limpeza profunda NÃO limpa/exclui módulos de nós instalados, que permanecem persistentes.
2.Purga manual: Além disso, empurrei ainda mais a purga com uma purga manual para ambos nodejs
e node_modules
.eu procurei por TODOS pastas relacionadas no meu computador, mais próximas da raiz (ubuntu: /home/<user>/
) o melhor.Tive o cuidado de excluir todos os globais instalados anteriormente .../node-modules/
pastas, sem excluir módulos locais (instalações locais específicas, que ainda estavam funcionando).
3.Reinstale: Em seguida, os seguintes consoles permitiram uma reinstalação limpa:
sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
sudo npm install -g topojson jsdom
Depois disso, minha conversão de arquivo via módulo npm topojson
(dependendo de jsdom
) funcionou bem:
cd /myfolder/
topojson -o output.topo.json input.geo.json
4.Conclusão: Não consigo identificar o porquê, qual exclusão de arquivo/pasta permitiu o sucesso sudo apt-get install nodejs
+ sudo npm install -g topojson
reinstale.Mas esta é uma limpeza profunda via mouse e remoção recursiva sudo rm -r [node related folder/file]
desbloqueou definitivamente minha situação.
/!\ Ser muito cuidadoso com o rm -r
remoção recursiva. /!\
Outras dicas
Como você descobriu nos comentários, esse é um problema muito comum.Tão comum, na verdade, que os autores do jsdom o documentaram diretamente no arquivo README do repositório git do projeto.
DR
Você precisa ter um compilador C++ e Python2.7 instalado em sua máquina para instalar contextualizar que é uma dependência de jsdom.Caso contrário, a instalação do jsdom falhará.
Do README no Página do Github para jsdom:
Contextualizar
Contextify é uma dependência do jsdom, usado para execução
<script>
tags dentro da página.Em outras palavras, permite que o jsdom, que é executado em Node.js, execute strings de JavaScript em um ambiente isolado que finge ser um ambiente de navegador em vez de um servidor.Você pode ver como esse é um recurso importante.Infelizmente, fazer esse tipo de mágica requer C++.E no Node.js, usando C ++ de JavaScript significa usando "módulos nativos". Os módulos nativos são compilados no horário de instalação, para que funcionem com precisão para a sua máquina;ou seja, você não baixa um binário contextualizado do npm, mas cria um localmente após baixar o código-fonte do npm.
Infelizmente, compilar o C++ dentro do sistema de instalação do npm pode ser complicado, especialmente para usuários do Windows.Assim, um dos problemas mais comuns do jsdom é tentar utilizá-lo sem as ferramentas de compilação adequadas instaladas.Aqui está o que você precisa para compilar o Contextify e, portanto, instalar o jsdom:
janelas
- Uma cópia recente da versão x86 do Node.js para Windows, não da versão x64.
- Uma cópia do Visual C++ 2010 Express.
- Uma cópia do Python 2.7, instalada no local padrão C:\Python27.
Existem algumas pequenas modificações que podem funcionar;por exemplo, versões completas do Visual Studio geralmente funcionam e, às vezes, você pode até fazer com que uma versão x64 do Node.js funcione também.Mas é complicado, então comece com o básico!
Mac
- XCode precisa ser instalado
- "Ferramentas de linha de comando para XCode" precisam ser instaladas
- Inicie o XCode uma vez para aceitar a licença, etc.e certifique-se de que esteja instalado corretamente
Linux
Você precisará de várias ferramentas de construção instaladas, como make, Python 2.7 e um conjunto de ferramentas do compilador.A forma de instalá-los será específica para sua distribuição, caso você ainda não os tenha.
Tente instalar jsdom novamente depois de satisfazer os requisitos mencionados acima para o seu sistema operacional e veja se isso resolve o problema.
A propósito, você está tendo o mesmo problema com topojson porque depende de d3 que por sua vez depende jsdom, então é o mesmo problema ao instalar o jsdom.Espero que isto ajude!
--EDITAR--
Como parece que você está usando o Ubuntu, recomendo começar com o seguinte comando:
sudo apt-get install build-essential
Isso irá instalar fazer e g++ e algumas outras ferramentas.Este pacote e o Python2.7 são provavelmente tudo que você precisa para instalar o contextify com sucesso.
Solução 1b: Eu [suspeito][1] que rm -r /home/<user>/local/lib/node_modules/
ser o elemento-chave para desbloquear a situação.Você pode listar o global (-g
) node_modules e, em seguida, remova os relevantes (topojson
e/ou jsdom
e/ou node-gyp
) especificamente e, em seguida, reinstale-os.
Comandos: No Ubuntu, tente ...
cd /home/<user>/local/lib/node_modules/ #replace <user> by relevant user name to set your cwd
ls -1 # give the list of global modules names
rm -r /<module_name> #replace <module_name> by relevant name to remove it
sudo npm install -g <module_name> #replace <module_name> by relevant name for global install
Observação: topojson
depende de jsdom
e npm-gyp
.
[1]:não tentei, mas faz sentido de acordo com meu diagnóstico.