prefisso del percorso globale npm

Sono più cauto del solito perché sono stato confuso dal comportamento di npm in passato.

Sono su un Mac e ho installato node.js attraverso il brew install node .

Ora che voglio eseguire jslint.js sulla riga di comando come comando jslint trovo che il modo canonico per farlo è sudo npm install -g jslint che ha funzionato correttamente con questo output:

 $ 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]) 

Successivamente

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

a causa di /usr/local/share/npm/bin non si trova nel mio $PATH .

    1) Perché brew non installa il percorso globale del percorso npm nel percorso? Forse lo ha fatto, ma qualcosa di zsh lo sta rovinando. Dove potrei essere in grado di trovarlo?
    2) Dovrei farlo? (Aggiungi :/usr/local/share/npm/bin al $PATH esportato nella parte inferiore del mio ~/.zshrc )

    Sembra che questo non sia il modo giusto per farlo perché se installo qualcos’altro in seguito (usando Homebrew o qualcosa del genere) avrò bisogno di aggiungerlo al mio script di avvio di zsh per impostare il percorso. Immagino che in questa particolare istanza sia solo questione di npm install -g non facendo i giusti npm install -g simbolici in una posizione “corretta” (come /usr/local/bin forse).

    Penso che quello che farò sia build manualmente i link simbolici all’interno di /usr/local/bin per tutti i programmi con cui ho problemi e dovrebbe essere abbastanza buono per i miei scopi.

    Estendere il PATH con:

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

    non è una pessima idea. Detto questo, non dovresti farlo.

    Esegui questo:

     npm config get prefix 

    L’impostazione predefinita su OS X è /usr/local , il che significa che npm collegherà i binari in /usr/local/bin , che dovrebbero già trovarsi sul PATH (specialmente se stai usando Homebrew).

    Così:

    1. npm config set prefix /usr/local se è qualcos’altro, e
    2. Non usare sudo con npm! Secondo i documenti jslint , dovresti essere in grado di npm install .

    Se hai installato npm come sudo ( sudo brew install ), prova a reinstallarlo con la semplice brew install . L’homebrew dovrebbe aiutare a mantenerti libero da sudo .

    Ho passato un po ‘di tempo su questo problema e l’interruttore PATH non mi ha aiutato. Il mio problema era il bug di Homebrew / node / npm trovato qui – https://github.com/npm/npm/issues/3794

    Se hai già installato il nodo usando Homebrew, prova **** Note per commenti che potrebbero non essere sicuri. Ha funzionato per me ma potrebbe avere conseguenze non intenzionali. Sembra anche che l’ultima versione di Homebrew installi correttamente npm. Quindi probabilmente proverei a brew update , brew doctor , brew upgrade node ecc. Prima di provare ****:

     npm update -gf 

    Oppure, se vuoi installare il nodo con Homebrew e avere lavoro su npm, usa:

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

    Io uso brew e il prefisso era già impostato per essere:

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

    Ho notato che la cartella bin e lib era di proprietà di root, il che ha impedito la solita installazione non sudo, quindi li ho ri-posseduti dall’utente

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

    Poi ho appena aggiunto il percorso al mio .bash_profile che si trova in / Users / [user]

     PATH=$PATH:~/.node/bin 

    brew non dovrebbe richiedere di usare sudo anche quando si esegue npm con -g. Questo potrebbe effettivamente creare più problemi lungo la strada.

    In genere, brew o port ti permettono di aggiornare il tuo path in modo che non rischi di rovinare il tuo .zshrc, .bashrc, .cshrc, o qualsiasi altro tipo di shell tu usi.

    Ognuno ha lo stesso problema è relativo a un conflitto tra brew e npm Si prega di controllare questa soluzione https://gist.github.com/DanHerbert/9520689

    Prova a correre:

     PATH=$PATH:~/npm/bin 

    e quindi eseguire un test eseguendo express nella riga di comando. Questo ha funzionato per me.

    Se hai collegato i pacchetti del nodo usando il comando sudo

    Quindi vai alla cartella in cui node_modules sono installati a livello globale.

    Su sistemi Unix sono normalmente collocati in / usr / local / lib / node o / usr / local / lib / node_modules se installati a livello globale. Se si imposta la variabile di ambiente NODE_PATH su questo percorso, i moduli possono essere trovati per nodo.

    Windows XP -% USERPROFILE% \ Dati applicazioni \ npm \ node_modules Windows 7 -% AppData% \ npm \ node_modules

    e quindi eseguire il comando

     ls -l 

    Questo darà l’elenco di tutti i node_modules globali e puoi facilmente vedere i moduli del nodo collegato.

    sudo brew non è più un’opzione, quindi se installi con brew a questo punto otterrai 2 cose davvero antipatiche: A: gli piace installarlo in /usr/local/opts o in base a questo, / usr / local / condivisa. Questo non è un grosso problema all’inizio, ma ho avuto problemi con il nodo PATH, specialmente quando ho installato Lint. B: sei un po ‘bloccato con i comandi sudo finché non lo disinstalli e lo installi in questo modo o puoi ottenere lo stack da Bitnami

    Raccomando questo metodo sull’opzione stack perché è pronto per andare se hai più progetti. Se si utilizza lo stack MEAN premade, è necessario configurare host virtuali in httpd.conf (più di un dolore in questo stack rispetto a XAMPP), come al solito aggiornamento extra / vhosts.conf e / etc / hosts per ogni ulteriore progetto, a meno che non si voglia reimpostare e riavviare il server quando si eseguono operazioni di aggiornamento.