Los módulos del nodo global no se instalan correctamente. Comando no encontrado

82

Tengo un problema al instalar módulos de nodo global y todo lo que encuentro en línea dice que la solución es simplemente agregar -g. Cuál no es el problema. Creo que es un problema de vinculación o un problema de directorio incorrecto.

Esto es lo que hago:

$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
...downloads correctly

$ express myapp
bash: express: command not found

Sin embargo, cuando ejecuto la ubicación del enlace directo para expresar, funciona:

   $ /usr/local/share/npm/bin/express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
... Builds app correctly

Dónde está el módulo:

$ which node
/usr/local/bin/node
$ node -pe process.execPath
/usr/local/Cellar/node/0.8.20/bin/node
$ npm link express
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express

En mi .bash_profile tengo:

export PATH=/usr/local/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node

¿Necesito cambiar mi entorno de nodo para descargar a la carpeta correcta? ¿Hay algo que no se vincula correctamente? Estoy perdido..

¡Gracias!

Otras especificaciones:

$ node --version
v0.8.20
$ npm --version
1.2.11
$ brew --version
0.9.4
OSX Version 10.8.2
im_benton
fuente
1
Es porque / usr / local / share / npm / bin / no está en su $ PATH de su shell. Por eso el caparazón no puede encontrar express.
JP Richardson
2
Agregué: export PATH = / usr / local / share / npm / bin: $ PATH a mi .bash_profile y funcionó. ¡Gracias! Agregue una respuesta para que pueda aceptarla y votar a favor.
im_benton
En mi caso, teniendo también NPM instalado a través de Cellar en OSX, mi binruta, que configuré en .bash_profile, es:export PATH=$PATH:/usr/local/Cellar/node/10.5.0/bin
Shane

Respuestas:

63

Agregue $(npm get prefix)/bina su PATH(por ejemplo, en .bashrc), así:

echo "export PATH=$PATH:$(npm get prefix)/bin" >> ~/.bashrc

Para obtener más información, consulte npm help npm:

modo global: npm instala paquetes en el prefijo de instalación en el prefijo / lib / node_modules y los bins se instalan en el prefijo / bin.

Puede encontrar el prefijo de instalación con npm get prefixo npm config list | grep prefix.

Tim Smith
fuente
¿Qué pasa con los no sudo que usan nvm, no debería la ruta ser $HOME/.npmal .bash_profile o .bashrc? Yo uso nvm, así que quiero asegurarme de que no estoy cruzando cosas en esto.
blamb
Para cualquiera que haya instalado Node y npm a través de Homebrew en OSX, la ubicación de la carpeta bin que debe agregar PATHserá /usr/local/Cellar/node/VERSION_NUMBER/bin/.
Jon Betts
135

Esto puede significar que el prefijo de instalación de su nodo no es el esperado.

Puede configurarlo así:

npm config set prefix /usr/local

luego intente ejecutar de npm install -gnuevo, y debería funcionar. Me funcionó en una Mac y la solución proviene de este sitio:

http://webbb.be/blog/command-not-found-node-npm/

EDITAR: Tenga en cuenta que me encontré con esto nuevamente en una nueva Mac que estoy configurando, y también tuve que hacer el proceso detallado aquí en stackoverflow .

Brad Parks
fuente
Estoy usando nodenvy probablemente haya una mejor manera de resolver este problema para mi caso. Sin embargo, su solución funcionó como una solución rápida y sucia. Luego cambié el prefijo de nuevo al nodenvprefijo y pude ejecutar el paquete desde /usr/local path. ¡Gracias!
Garrett Tacoronte
3
¡He pasado meses con la intención de solucionar este problema y esta es la única respuesta que he visto que lo solucionó para mí! Muchísimas gracias.
azz0r
Todavía no me funciona. ¿Que puedo hacer? Quiero instalar mecanografiado globalmente en win7.
Artimal
1
Probé muchas soluciones, pero solo esta lo hizo por mí. Por alguna razón, mi prefijo se configuró a /Users/(username)/.npm-globalpesar de que hice una nueva instalación de todo. También estoy en una Mac
Castilho
Esto lo romperá si ha instalado Node a través de Cellar.
Shane
12

Mi npm tampoco pudo encontrar paquetes globales. Hice lo que sugirió Brad Parks:

npm config set prefix /usr/local

Luego recibí un error de permisos EACCES (NO UTILICE sudo npm install -g <package> ) y lo arreglé a través de los documentos oficiales de npm: https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

  1. En la línea de comando, en su directorio personal, cree un directorio para instalaciones globales:
 mkdir ~/.npm-global
  1. Configure npm para usar la nueva ruta del directorio:
 npm config set prefix '~/.npm-global'
  1. En su editor de texto preferido, abra o cree un archivo ~ / .profile y agregue esta línea:
 export PATH=~/.npm-global/bin:$PATH
  1. En la línea de comando, actualice las variables de su sistema:
 source ~/.profile
  1. Luego instale un paquete globalmente y pruébelo. Por ejemplo:
npm install -g awsmobile-cli
awsmobile configure

Vicente
fuente
hola a todos, tengo una pregunta. Después del paso 2, no encuentro bin / en ~ / .npm-global . Entonces, no funciona, ¿verdad?
AquariusPotter
Todavía debería funcionar. No olvide que la export PATH=~/.npm-global/bin:$PATHlínea está en el archivo ~ / .profile . ¿Tiene algún error?
Vicente
6

En mi caso, la variable de entorno NODE_PATH estaba vacía. Compruebe si está vacío

echo $NODE_PATH

si NODE_PATH está vacío. Luego cambie ~ / .bash_profile y agregue NODE_PATH

nano ~/.bash_profile
export NODE_PATH=`npm root -g`
source ~/.bash_profile

Ahora instale los módulos npm nuevamente y verifique si se están instalando en la ruta npm root -g

lazyTank
fuente
¡Esta! es mi problema al usar NVM y las respuestas requieren que busque paquetes globales en linux / fedora
Ray Foss
4

¡ Nunca instalo nada de npm, a través de sudo! Tengo mis propias razones, pero trato de mantener las cosas simples y basadas en el usuario, ya que este es un mundo de desarrollo de usuarios, y no todos tienen acceso de root, y root / sudo al instalar cosas como esta parece desordenar las cosas para comenzar con. Después de todo, todos los desarrolladores deberían poder seguir estas instrucciones, no solo los usuarios privilegiados de sudo.

Este sistema en particular es un RHEL7 al que se accede a través de SSH:

Con frecuencia, se necesitan varias versiones de nodo, por lo que uso NVM https://github.com/creationix/nvm

Dicho esto, puedo mostrarte un ejemplo práctico para -g instalaciones globales, usando NVM, NPM y rutas de nodo que no usan root.

establezca su prefijo para .npm-packagessi aún no lo está. (nota, eso es un guion, no un guion bajo)

nvm config ls
prefix = "/home/<yourusername>/.npm-packages"

Luego ajuste su ~ / .bash_profile o .bashrc si prefiere leer sobre por qué y cuál aquí , con la siguiente información.

#PATH EXPORTS
NODE_MODULES=$HOME/.npm                                          
NPM_PACKAGES=$HOME/.npm-packages/bin                           
export PATH=$PATH:$HOME/bin:$NODE_MODULES:$NPM_PACKAGES         

#NVM ENABLE                                                 
export NVM_DIR="$HOME/.nvm"                                   
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 

Eso cubre prácticamente todos los caminos. Por ejemplo, si instala gulp de esta manera, npm install -g gulpse enlaza simbólicamente ~/.npm-packages/bin(tenga en cuenta que es un guión, no un guión bajo). (sin necesidad de gulp-cli, ogulp-cl )

Prácticamente puede reemplazar / comentar todas las demás exportaciones de rutas de nodo. Puede poner esta información de ruta debajo de cualquier otra información de ruta que ya tenga, de manera segura, sin que sobrescriba esas cosas.

culpar
fuente
1
  1. Agregue la siguiente línea a su ~/.bash_profile

    export PATH="$HOME/.npm/bin:$PATH"
    
  2. Cargar perfil bash

    bash -l
    
Lasithds
fuente
1

Para usuarios de Windows

Agregue esto a su ruta: "% AppData% \ npm"

Adedoyin Akande
fuente
0

El problema que tuve fue que faltaban los binarios porque el archivo .npmrc específico del usuario en mi directorio de inicio se había bin-linksconfigurado en false, aunque el default is true.

En caso de que este sea su problema, verifique que ninguno de sus archivos .npmrc lo tenga configurado como falso.

Luego, reinstalar todos los módulos creará los binarios en el prefixpara que PATHpueda verlos.

hoyuelo
fuente
0

Verifique la carpeta binaria de su módulo Node global y agréguela a su $ PATH.

npm list -g | head -1

Si usa nodenv, la ruta cambiará siempre que instale la versión del nodo global. Agregar la ruta de esta manera resuelve mi problema.

"$HOME/.nodenv/versions/$(nodenv global)/bin"

Atajo para agregar la ruta a zsh

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
Rossa D
fuente