Pregunta

Intento instalar jsdom como:

$ sudo npm install -g jsdom
# OR
$ sudo npm install    jsdom

Después de algún comando exitoso, la instalación falla rápidamente y el primer mensaje de error aparece después del [....] :

$ 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
....

¿Pista?Este error también aparece para otros módulos:

 $sudo npm install -g topojson 
 #bug with `contextify@0.1.7 install` error as well.

enter image description here

¿Cómo arreglar eso?


Editar: Lo intenté sudo apt-get remove --purge nodejs npm topojson luego reinstalarlo de varias maneras. Incluso cuando nodejs la reinstalación es exitosa, el error permanece, así que supongo que es bastante contextual (node.gyp ? cwd ?...).Eliminar/reinstalar formas probadas:

¿Fue útil?

Solución 2

Parece que encontré una manera eliminando cuidadosamente todos los archivos y carpetas relacionados con los nodos en mi computadora.

0.Contexto: Anteriormente hice varias limpiezas fallidas de la consola, con

sudo apt-get remove --purge nodejs npm topojson

seguido de ~3 formas diferentes de reinstalar nodejs.Intenté CADA forma, desde la limpieza hasta la reinstalación, entre 2 y 4 veces.

1.Purga de terminales: Primero limpiemos mi desorden de la manera más profunda posible:

npm cache clean; bower cache clean; grunt clean;
sudo apt-get remove --purge nodejs npm topojson

Sin embargo, acabo de notar que esta purga profunda NO purga/elimina los módulos de nodos instalados, que se mantienen persistentes.

2.Purga manual: Además, empujé la purga aún más con una purga manual para ambos nodejs y node_modules.busqué TODO carpetas relacionadas en mi computadora, más cerca de la raíz (ubuntu: /home/<user>/) el mejor.Tuve cuidado de eliminar todos los archivos globales previamente instalados. .../node-modules/ carpetas, sin eliminar módulos locales (instalaciones locales específicas, que aún estaban funcionando).

3.Reinstalar: Luego, las siguientes consolas permitieron una reinstalación limpia:

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

Después de eso, mi conversión de archivos a través del módulo npm topojson (dependiendo de sí mismo jsdom) funcionó bien:

cd /myfolder/
topojson -o output.topo.json input.geo.json   

4.Conclusión: No puedo identificar por qué, qué archivo/carpeta se eliminó correctamente sudo apt-get install nodejs + sudo npm install -g topojson reinstalar.Pero esta es una limpieza profunda mediante el mouse y eliminación recursiva sudo rm -r [node related folder/file] Desbloqueó definitivamente mi situación.

/!\ Ser muy cuidadoso con el rm -r eliminación recursiva. /!\

Otros consejos

Como descubrirás por los comentarios, este es un problema muy común.De hecho, es tan común que los autores de jsdom lo han documentado directamente en el archivo README del repositorio git del proyecto.


TL;DR

Necesita tener un compilador de C++ y Python2.7 instalado en su máquina para instalar contextualizar que es una dependencia de jsdom.De lo contrario, la instalación de jsdom fallará.


Desde el archivo LÉAME en el Página de Github para jsdom:

Contextificar

Contextify es una dependencia de jsdom, utilizada para ejecutar <script> etiquetas dentro de la página.En otras palabras, permite que jsdom, que se ejecuta en Node.js, ejecute cadenas de JavaScript en un entorno aislado que pretende ser un entorno de navegador en lugar de un servidor.Puedes ver cómo esta es una característica importante.

Desafortunadamente, hacer este tipo de magia requiere C++.Y en Node.js, usar C ++ de JavaScript significa usar "módulos nativos". Los módulos nativos se compilan en el momento de la instalación para que funcionen con precisión para su máquina;es decir, no descarga un binario contextualizado de npm, sino que crea uno localmente después de descargar la fuente de npm.

Desafortunadamente, compilar C++ dentro del sistema de instalación de npm puede ser complicado, especialmente para los usuarios de Windows.Por lo tanto, uno de los problemas más comunes con jsdom es intentar usarlo sin tener instaladas las herramientas de compilación adecuadas.Esto es lo que necesita para compilar Contextify y, por lo tanto, instalar jsdom:

ventanas

  • Una copia reciente de la versión x86 de Node.js para Windows, no la versión x64.
  • Una copia de Visual C++ 2010 Express.
  • Una copia de Python 2.7, instalada en la ubicación predeterminada de C:\Python27.

Hay algunas pequeñas modificaciones que pueden funcionar;por ejemplo, las versiones completas de Visual Studio suelen funcionar y, a veces, incluso puedes conseguir que funcione una versión x64 de Node.js.Pero es complicado, ¡así que empieza por lo básico!

Mac

  • Es necesario instalar XCode
  • Es necesario instalar "herramientas de línea de comandos para XCode"
  • Inicie XCode una vez para aceptar la licencia, etc.y asegúrese de que esté instalado correctamente

linux

Necesitará instalar varias herramientas de compilación, como make, Python 2.7 y una cadena de herramientas de compilación.La forma de instalarlos será específica de tu distribución, si aún no los tienes.

Intenta instalar jsdom nuevamente después de cumplir con los requisitos mencionados anteriormente para su sistema operativo, y vea si eso lo resuelve.

Por cierto, tienes el mismo problema con topojson porque depende de d3 que a su vez depende de jsdom, por lo que es el mismo problema al instalar jsdom.¡Espero que esto ayude!

--EDITAR--

Como parece que estás usando Ubuntu, recomendaría comenzar con el siguiente comando:

sudo apt-get install build-essential

Esto instalará hacer y g++ y algunas otras herramientas.Este paquete y Python2.7 es probablemente todo lo que necesitará para instalar Contextify con éxito.

Solución 1b: Yo [sospecho][1] el rm -r /home/<user>/local/lib/node_modules/ ser el elemento clave para desbloquear la situación.Puede enumerar el global (-g) node_modules, luego elimine los relevantes (topojson y/o jsdom y/o node-gyp) específicamente, luego reinstálelo (ellos).

Comandos: En ubuntu, prueba...

 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

Nota: topojson depende de jsdom y npm-gyp.

[1]:No probado, pero tiene sentido según mi diagnóstico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top