2012-02-03 10 views
13

He instalado NVM para Node.js siguiendo las instrucciones de este post:Node Manager Versión (NVM) NPM la instalación de módulos de carpeta común

http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/

Cuando cambio de versiones de nodo y luego usar la NGP para instalar un módulo, todos los módulos se colocan en la misma carpeta 'node_modules' (~/node_modules /) en lugar de en el directorio 'node_modules' específico para esa versión del nodo?

¿Alguna idea sobre cómo solucionar esto?

Respuesta

29

Sobre la base de los comentarios de https://github.com/creationix/nvm/pull/97:

Al instalar paquetes con NPM mediante el interruptor mundial -g el paquete termina en el directorio adecuado (es decir .nvm/$ VERSION/lib/node_modules) Sin embargo, node no puede requerirlo ya que de alguna manera no está buscando en su prefijo.

Así, utilizando npm install -g xxxxx pondrá los módulos en la ubicación correcta de NVM, pero si intenta require uno de ellos nodo no puede encontrar el módulo. Todavía estoy jugando con esto y lo actualizaré si encuentro una solución.

actualización

¿Dónde NPM puso node_modules? (Ver https://docs.npmjs.com/files/folders)

  • de instalación local (por defecto): pone cosas en ./node_modules de la raíz del paquete actual.
  • Instalación global (con -g): coloca cosas en/usr/local o donde sea que esté instalado el nodo.
  • Instalarlo localmente si va a require().
  • Instálelo globalmente si va a ejecutarlo en la línea de comandos.
  • Si necesita ambos, instálelos en ambos lugares, o use npm link.

Así que lo que hice fue correr npm init (ver http://npmjs.org/doc/init.html) en mi dir proyectos raíz que genera package.json. Ahora, cuando ejecuto npm install xxxxx, creo un directorio node_modules en mi carpeta de proyecto (que agrego a mi .gitignore). Esto funciona para los módulos que requiero en mi código.

Para comandos como CoffeeScript los instalo con npm install -g coffee-script, que los coloca en el directorio correcto (.nvm/$ VERSION/lib/node_modules). Si bien no puedo solicitar estos módulos (el enlace npm debería resolver este problema), puedo ejecutar los comandos, es decir, coffee.

+0

Finalmente una buena respuesta a esto, me he estado dando vueltas en esto por un tiempo. –

1

Acabo de instalar Express globally (-g) y estaba teniendo problemas cuando lo requería ("express"). Justo como Jesse Vogt dijo que acabo de reinstalar Express pero esta vez sin la -g simplemente así: "sudo npm install express" ¡y ahora está funcionando perfectamente!

+0

¿Puedes explicar por qué funcionó? –

+0

Para ser honesto con usted; No sé, soy bastante novato con esto. Sin embargo, navegando en la web que Jesse dejó (https: //docs.npmjs.com/getting-started/installation-npm-packages-local) Encontré lo siguiente: "Si desea depender del paquete de su propio módulo utilizando algo como Node's require, entonces desea instalarlo localmente ..." No entiendo muy bien la diferencia, pero con seguridad si necesita usar require() para ejecutar un servidor, debe realizar la instalación localmente (sin la g), porque eso funciona para mí. –

+0

Gracias por elaborar :) –

Cuestiones relacionadas