macos - node - reinstall npm
npm prefijo de ruta global (8)
Ampliando su PATH
con:
export PATH=/usr/local/share/npm/bin:$PATH
no es una idea terrible Habiendo dicho eso, no deberías tener que hacerlo.
Ejecuta esto:
npm config get prefix
El valor predeterminado en OS X es /usr/local
, lo que significa que npm enlazará binarios en /usr/local/bin
, que ya debería estar en su PATH
(especialmente si está utilizando Homebrew).
Asi que:
-
npm config set prefix /usr/local
si es otra cosa, y - ¡No use
sudo
con npm! De acuerdo con los documentos jslint , debería podernpm install
.
Si instaló npm como sudo ( sudo brew install
), intente reinstalarlo con la simple brew install
. Se supone que Homebrew te ayuda a mantenerte sudo
libre.
Estoy siendo más cauteloso que de costumbre porque me ha confundido el comportamiento de las npm
en el pasado.
Estoy en una Mac y he instalado node.js a través del brew install node
.
Ahora que quiero ejecutar jslint.js
en la línea de comandos como el comando jslint
, encuentro que la manera canónica de lograr esto es sudo npm install -g jslint
que se ejecutó con éxito con este resultado:
$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
[email protected] /usr/local/share/npm/lib/node_modules/jslint
└── [email protected] ([email protected])
Después
$ jslint ply.js
zsh: command not found: jslint
debido a /usr/local/share/npm/bin
no está en mi $PATH
.
1) ¿Por qué brew
no instaló la npm
global de npm
bin
en la ruta? Quizás sí, pero algo que hace zsh
es estropearlo. ¿Dónde podría ser capaz de encontrar eso?
2) ¿Debo hacer esto? (Agregar :/usr/local/share/npm/bin
a $PATH
exportado en la parte inferior de mi ~/.zshrc
)
Parece que esta no es la manera correcta de hacerlo porque si instalo algo más más tarde (usando Homebrew o algo así) tendré que agregarlo a mi secuencia de comandos de inicio zsh para establecer la ruta. Supongo que en este caso particular, solo es cuestión de que npm install -g
no haga los enlaces simbólicos correctos en una ubicación "adecuada" (como /usr/local/bin
).
Creo que lo que haré es construir manualmente enlaces simbólicos dentro de /usr/local/bin
para cualquier programa que tenga problemas y debería ser lo suficientemente bueno para mis propósitos.
Cualquiera tiene el mismo problema relacionado con un conflicto entre brew y npm. Consulte esta solución https://gist.github.com/DanHerbert/9520689
Intenta ejecutar:
PATH=$PATH:~/npm/bin
y luego haz una prueba ejecutando express
en la línea de comando. Esto funcionó para mí.
Pasé un tiempo sobre este tema, y el interruptor PATH no estaba ayudando. Mi problema fue el error Homebrew / node / npm que se encuentra aquí - https://github.com/npm/npm/issues/3794
Si ya ha instalado un nodo usando Homebrew, intente con **** Nota por cada comentario que esto podría no ser seguro. Funcionó para mí, pero podría tener consecuencias no deseadas. También parece que la última versión de Homebrew instala correctamente npm. Probablemente probaría la brew update
, brew doctor
, brew upgrade node
etc. antes de probar ****:
npm update -gf
O bien, si desea instalar un nodo con Homebrew y hacer que npm funcione, use:
brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh
Si ha vinculado los paquetes de nodo usando el comando sudo
Luego vaya a la carpeta donde node_modules están instalados globalmente.
En los sistemas Unix, normalmente se ubican en / usr / local / lib / node o / usr / local / lib / node_modules cuando se instalan globalmente. Si establece la variable de entorno NODE_PATH en esta ruta, los módulos se pueden encontrar por nodo.
Windows XP -% USERPROFILE% / Application Data / npm / node_modules Windows 7 -% AppData% / npm / node_modules
y luego ejecuta el comando
ls -l
Esto proporcionará la lista de todos los node_modules globales y podrá ver fácilmente los módulos de nodos vinculados.
Uso brew y el prefijo ya estaba configurado para ser:
$ npm config get prefix
/Users/[user]/.node
Me di cuenta de que la carpeta bin y lib era propiedad de root, lo que impedía la instalación habitual no sudo, por lo que volví a ser propiedad del usuario
$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin
Luego agregué la ruta a mi .bash_profile que se encuentra en / Users / [user]
PATH=$PATH:~/.node/bin
brew no debería exigirle que use sudo incluso cuando ejecuta npm con -g. Esto en realidad podría crear más problemas en el futuro.
Normalmente, brew o port le permiten actualizar su ruta para que no corra el riesgo de estropear su .zshrc, .bashrc, .cshrc o cualquier otro sabor de shell que use.
sudo brew ya no es una opción así que si instalas con brew en este punto vas a obtener 2 cosas realmente desagradables: A: le gusta instalar en /usr/local/opts
o según esto, / usr / local / compartido. Esto no es gran cosa al principio, pero he tenido problemas con el nodo PATH especialmente cuando instalé pelusa. B: estás atascado con los comandos sudo hasta que lo desinstales e instales de esta manera o puedes obtener la pila de Bitnami
Recomiendo este método sobre la opción de pila porque está listo si tienes varios proyectos. Si vas con la pila MEAN prefabricada, tendrás que configurar hosts virtuales en httpd.conf (más daño en esta pila que XAMPP), pásate la actualización habitual de tu extra / vhosts.conf y / etc / hosts por cada elemento adicional proyecto, a menos que desee volver a marcar y reiniciar su servidor cuando termine de actualizar las cosas.