npm préfixe de chemin global

Je suis plus prudent que d’habitude car j’ai été déconcerté par le comportement de npm dans le passé.

Je suis sur un Mac et j’ai installé node.js via le brew install node .

Maintenant que je veux lancer jslint.js sur la ligne de commande en tant que commande jslint je trouve que la manière canonique d’accomplir ceci est sudo npm install -g jslint qui a été exécuté 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 [email protected] /usr/local/share/npm/lib/node_modules/jslint └── [email protected] ([email protected]) 

Par la suite

 $ jslint ply.js zsh: command not found: jslint 

à cause de /usr/local/share/npm/bin n’étant pas dans mon $PATH .

1) Pourquoi le brew n’a-t-il pas installé le chemin global npm bin vers le chemin? Peut-être que c’était le cas, mais quelque chose que zsh fait est de foirer. Où pourrais-je trouver ça?
2) Dois-je faire cela? (Ajoutez :/usr/local/share/npm/bin au $PATH exporté en bas de mon ~/.zshrc )

Il semble que ce ne soit pas la bonne façon de procéder car si j’installe quelque chose plus tard (en utilisant Homebrew ou quelque chose d’autre), je devrai l’append à mon script de démarrage zsh pour définir le chemin. Je suppose que dans ce cas particulier, il suffit que npm install -g ne fasse pas les bons liens symboliques dans un “bon” emplacement (comme /usr/local/bin peut-être).

Je pense que ce que je vais faire est de créer manuellement des liens symboliques dans /usr/local/bin pour tous les programmes avec lesquels j’ai des problèmes et cela devrait être suffisant pour mes besoins.

Extension de votre PATH avec:

 export PATH=/usr/local/share/npm/bin:$PATH 

n’est pas une idée terrible. Cela dit, vous ne devriez pas avoir à le faire.

Lance ça:

 npm config get prefix 

La valeur par défaut sous OS X est /usr/local , ce qui signifie que npm établira un lien symbolique entre les binarys dans /usr/local/bin , qui devrait déjà figurer sur votre PATH (en particulier si vous utilisez Homebrew).

Alors:

  1. npm config set prefix /usr/local si c’est autre chose, et
  2. N’utilisez pas sudo avec npm! Selon les documents jslint , vous devriez juste pouvoir l’ npm install .

Si vous avez installé npm comme sudo ( sudo brew install ), essayez de le réinstaller avec plain ol ‘ brew install . Homebrew est censé vous aider à restr libre de sudo .

Passé un certain temps sur ce problème, et le commutateur PATH n’a pas aidé. Mon problème était le bogue Homebrew / node / npm trouvé ici – https://github.com/npm/npm/issues/3794

Si vous avez déjà installé le noeud en utilisant Homebrew, essayez **** Remarque par commentaire que cela pourrait ne pas être sûr. Cela a fonctionné pour moi, mais pourrait avoir des conséquences imprévues. Il semble également que la dernière version de Homebrew installe correctement npm. Il est donc probable que j’essayerais de brew update brew doctor , de brew upgrade node etc. avant d’essayer ****:

 npm update -gf 

Ou, si vous souhaitez installer le noeud avec Homebrew et que npm fonctionne, utilisez:

 brew install node --without-npm curl -L https://npmjs.org/install.sh | sh 

J’utilise le armsage et le préfixe était déjà configuré pour:

 $ npm config get prefix /Users/[user]/.node 

J’ai remarqué que les dossiers bin et lib étaient la propriété de root, ce qui empêchait l’installation non sudo habituelle, donc je les ai possédés à nouveau à l’utilisateur

 $ cd /Users/[user]/.node $ chown -R [user]:[group] lib $ chown -R [user]:[group] bin 

Ensuite, je viens d’append le chemin d’access à mon fichier .bash_profile situé dans / Users / [user]

 PATH=$PATH:~/.node/bin 

brew ne devrait pas vous obliger à utiliser sudo même si vous exécutez npm avec -g. Cela pourrait en fait créer plus de problèmes par la suite.

En règle générale, brew ou port vous permet de mettre à jour votre chemin afin de ne pas risquer de déconner votre fichier .zshrc, .bashrc, .cshrc ou la version de shell que vous utilisez.

Tout le monde a le même problème, c’est lié à un conflit entre l’infusion et le npm. Veuillez vérifier cette solution https://gist.github.com/DanHerbert/9520689

Essayez de courir:

 PATH=$PATH:~/npm/bin 

puis effectuez un test en exécutant express dans la ligne de commande. Cela a fonctionné pour moi.

Si vous avez lié les packages de nœuds à l’aide de la commande sudo

Ensuite, allez dans le dossier où node_modules sont installés 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 sur ce chemin, les modules peuvent être trouvés par nœud.

Windows XP -% USERPROFILE% \ Application Data \ npm \ node_modules Windows 7 -% AppData% \ npm \ node_modules

puis exécutez la commande

 ls -l 

Cela donnera la liste de tous les modules_noeud globaux et vous pourrez facilement voir les modules de noeud liés.

sudo brew n’est plus une option, donc si vous installez avec brew à ce stade, vous allez obtenir 2 choses vraiment désagréables: A: il aime installer dans /usr/local/opts ou selon ceci, / usr / local / partagé. Ce n’est pas un gros problème au début, mais j’ai eu des problèmes avec le noeud PATH en particulier lorsque j’ai installé des peluches. B: vous êtes en quelque sorte coincé avec les commandes sudo jusqu’à ce que vous désinstallez et installez-le de cette façon ou vous pouvez obtenir la stack de Bitnami

Je recommande cette méthode par rapport à l’option stack car elle est prête à l’emploi si vous avez plusieurs projets. Si vous utilisez la stack MEAN prédéfinie, vous devrez configurer des hôtes virtuels dans httpd.conf (plus de problèmes dans cette stack que XAMPP), plus la mise à jour habituelle de vos fichiers extra / vhosts.conf et / etc / hosts pour chaque projet, à moins que vous ne souhaitiez regrouper et redémarrer votre serveur lorsque vous avez terminé la mise à jour.