npm mondiale préfixe de chemin
je suis plus prudent que d'habitude parce que j'ai été troublé par le comportement de npm
dans le passé.
je suis sur un Mac et j'ai installé un noeud.js à brew install node
.
maintenant que je veux exécuter jslint.js
sur la ligne de commande comme la commande jslint
je trouve que le moyen canonique d'accomplir ceci est sudo npm install -g jslint
qui a fonctionné avec succès avec cette sortie:
$ 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
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)
Par la suite
$ jslint ply.js
zsh: command not found: jslint
dû à /usr/local/share/npm/bin
n'étant pas dans mon $PATH
.
1) Pourquoi brew
ne pas installer mondial npm
bin
chemin pour chemin? Peut-être, mais quelque chose comme zsh
est en train de tout gâcher. Où pourrais-je être capable de le trouver?
2) dois-je faire cela? (Ajouter :/usr/local/share/npm/bin
au $PATH
exporté au bas de mon ~/.zshrc
)
It il semble que ce ne soit pas la bonne façon de le faire car si j'installe quelque chose plus tard (en utilisant Homebrew ou quelque chose comme ça) je vais devoir l'ajouter à mon script de démarrage zsh pour définir le chemin. Je suppose que dans ce cas particulier, il s'agit simplement de la npm install -g
ne faisant pas les bons liens symboliques dans un "bon" emplacement (comme /usr/local/bin
peut-être).
je pense que ce que je vais faire est manuellement construire des liens symboliques à l'intérieur de /usr/local/bin
pour tous les programmes que j'ai des problèmes avec et il devrait être assez bon pour mes fins.
8 réponses
extension de votre PATH
avec:
export PATH=/usr/local/share/npm/bin:$PATH
n'est pas une mauvaise idée. Cela dit, vous ne devriez pas avoir à le faire.
Exécuter ceci:
npm config get prefix
la valeur par défaut sur OS X est /usr/local
, ce qui signifie que npm va faire un lien symbolique vers /usr/local/bin
, qui devrait déjà être sur votre PATH
(surtout si vous utilisez Homebrew).
:
-
npm config set prefix /usr/local
si c'est autre chose, et - Ne pas utiliser
sudo
avec npm! Selon le jslint docs , vous devriez juste être en mesure denpm install
il.
si vous avez installé npm sous le nom de sudo ( sudo brew install
), essayez de le réinstaller avec le simple brew install
. Homebrew est censé vous aider à garder sudo
libre.
a passé un moment sur cette question, et le commutateur de chemin n'a pas aidé. Mon problème était le bug Homebrew/node/npm trouvé ici - https://github.com/npm/npm/issues/3794
si vous avez déjà installé node en utilisant Homebrew, essayez ****notez Par commentaires que cela pourrait ne pas être sûr. Ça a marché pour moi, mais ça pourrait avoir des conséquences involontaires. Il semble également que la dernière version de Homebrew installe correctement npm. Si probable que j'essaierais brew update
, brew doctor
, brew upgrade node
etc avant d'essayer****:
npm update -gf
ou, si vous voulez installer node avec Homebrew et avoir un travail npm, utilisez:
brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh
j'utilise brew et le préfixe était déjà fixé à:
$ npm config get prefix
/Users/[user]/.node
j'ai remarqué que le dossier bin et lib étaient la propriété de root, ce qui a empêché l'installation habituelle non sudo, donc je les ai repris à l'utilisateur ""
$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin
puis j'ai juste ajouté le chemin à mon .bash_profile qui se trouve dans /Utilisateurs/[utilisateur]
PATH=$PATH:~/.node/bin
brew ne devrait pas vous obliger à utiliser sudo même si vous utilisez npm avec -G. Cela pourrait en fait créer plus de problèmes plus tard.
typiquement, brew ou port vous permettent de mettre à jour votre chemin pour qu'il ne risque pas de gâcher votre .zshrc,.bashrc,.cshrc, ou quel que soit le parfum de la coquille que vous utilisez.
N'importe qui a le même problème c'est lié à un conflit entre brew et npm S'il vous plaît vérifier cette solution https://gist.github.com/DanHerbert/9520689
Essayez de lancer:
PATH=$PATH:~/npm/bin
et ensuite faire un test en lançant express
dans la ligne de commande. Cela a fonctionné pour moi.
si vous avez lié les paquets de noeuds en utilisant la commande sudo
puis allez dans le dossier où node_modules est installé globalement.
sur les systèmes Unix, ils sont normalement placés dans /usr/local/lib/node ou /usr/local/lib/node_modules lorsqu'ils sont installés globalement. Si vous définissez la variable d'environnement NODE_PATH à ce chemin, les modules peuvent être trouvés par noeud.
Windows XP - %USERPROFILE % \Application Data\npm\node_modules Windows 7 - %AppData % \npm\node_modules
et ensuite exécuter la commande
ls -l
Cela donnera la liste de tous les modules globaux node_modules et vous pourrez facilement voir les modules de noeuds liés.
sudo brew n'est plus une option, donc si vous installez avec brew à ce stade, vous allez obtenir 2 vraiment désagréable choses:
R: il aime installer dans /usr/local/opts
ou selon ceci, /usr/local/partagé. Ce n'est pas grand chose au début mais j'ai eu des problèmes avec le chemin des noeuds surtout quand j'ai installé lint.
B: vous êtes en quelque sorte coincé avec les commandes sudo jusqu'à ce que vous désinstallez et l'installez de cette façon ou vous pouvez obtenir la pile de Bitnami
je recommande cette méthode par rapport à l'option stack car elle est prête à être utilisée si vous avez plusieurs projets. Si vous utilisez la pile de moyens premade, vous devrez configurer des hôtes virtuels dans httpd.conf (plus d'une douleur dans cette pile que XAMPP)plust la mise à jour habituelle de vos extra/vhosts.conf et / etc / hosts pour chaque projet supplémentaire, à moins que vous ne vouliez re-pointer et redémarrer votre serveur lorsque vous avez terminé la mise à jour.