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.

enter image description here

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:

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top