2013-08-03 21 views
11

Ho un problema per l'installazione npmNPM: come trovare la cartella ./node_modules/.bin?

ho creato un progetto dicono progetto A

cd ~/projectA 
npm install sails 

ma comandano le vele non è stato trovato dopo l'installazione.

So che è installato correttamente nella directory ~/projectA/node_modules. ma non è possibile procurarsi l'eseguibile. E so che è installato ~/projectA/node_modules/.bin

Come posso caricare automaticamente il file .bin ogni volta che accedo a questo progetto?

Ho fatto qualcosa di sbagliato?

+0

Sei sicuro che sia installato in '~/projectA/node_modules/.bin' e non '~/projectA/node_modules/sails/bin' invece? Cosa intendi per fonte? – verybadalloc

+0

@verybadalloc source è come il punto unix http://en.wikipedia.org/wiki/Dot_(Unix) e http://superuser.com/a/46146 – SHernandez

+2

possibile duplicato di [Come utilizzare il pacchetto installato localmente nel nodo \ _modules?] (http://stackoverflow.com/questions/9679932/how-to-use-package-installed-locally-in-node-modules) – mightyiam

risposta

15

posso darvi una soluzione poco elegante, che sta lavorando per me. Ho appena esportato il mio percorso nel mio file .bashrc.

export PATH="$PATH:./node_modules/.bin" 

Modifica: È stato un po 'di tempo, ma ho cambiato la mia strategia per utilizzare invece gli script npm. Nel caso di cui sopra, l'installazione package.json come segue:

"scripts": { 
    "sails": "sails" 
} 

che è quindi possibile eseguire con

npm run sails 

o con argomenti

npm run sails -- <args> 
+6

Vorrei mettere prima node_modules/.bin: 'export PATH = "./node_modules/.bin:$PATH" ' –

+0

Upvote per l'utilizzo degli script npm e per il suggerimento su come utilizzare gli arg. – logan

2

Per utilizzare sulla riga di comando come sails generate foo è necessario installare il modulo npm globalmente.

npm install -g sails 

Si potrebbe anche utilizzare il percorso per il bidone nel comando se non si desidera installare a livello globale:

./node_modules/sails/bin/sails.js generate foo 
2

Le istruzioni ufficiali per vele (https://github.com/balderdashy/sails) consiglia

A installare l'ultima versione stabile con lo strumento da riga di comando:

sudo npm -g install sails 

Questo installa a livello globale e aggiunge ad una directory come /usr/local/bin che dovrebbe essere nel vostro $PATH.

Ma per rispondere alla domanda generale per quanto riguarda la posizione dei binari se si installa a livello locale, dovrebbero essere messi in ./node_modules/.bin directory (quindi eseguire ./node_modules/.bin/sails ...)

10

si dovrebbe utilizzare il comando npm bin per ottenere un percorso assoluto per il vostro directory bin corrente del nodo.

Ad esempio:

➤ lessc 
bash: lessc: command not found 
➤ npm bin 
/home/brice/[...]/node_modules/.bin 
➤ export PATH=$(npm bin):$PATH 
➤ lessc --version 
lessc 1.7.3 (Less Compiler) [JavaScript] 

questo modo si evita il problema di percorsi relativi, soprattutto se avete intenzione di utilizzare questo in un sistema di compilazione che richiamare il comando nelle sottodirectory.

1

Un po 'più robusto è:

export PATH=$(npm bin):$PATH 

è possibile eseguirlo, aggiungerlo al profilo di shell, o creare un alias come:

alias snpm='export PATH=$(npm bin):$PATH' 

Se lo fai andare via alias , assicurati di usare le virgolette singole in modo che ritardi l'esecuzione delle variabili!

+0

Grazie per l'aiuto! –

0

Se non ti piace scherzare con il tuo PERCORSO per l'esecuzione di uno script npm che non è globale - ad es. tu sei l'unico ad usarlo -, personalmente raccomanderei l'uso di un "alias" sh.

  1. NPM installare (a livello locale) il vostro amato pacchetto (JSON-diff qui, per esempio)

    cd ~ && npm install json-diff 
    
  2. alias esso (salvarlo nel proprio file ~/.xxxxrc):

    alias diffj "\`npm bin\`/json-diff !*" 
    

Poi, per diffing 2 jSON di:

diffj old.json new.json 
0

Nel mio ~/.bashrc, ho il seguente:

function nbin { 
    local dir; 
    dir=$(npm bin) 
    if [ -d "$dir" ]; then 
    (# subshell to not change this shell's $PATH 
     PATH=$dir:$PATH 
     eval "[email protected]" 
    ) 
    else 
    echo "\"$dir\" is not an npm binary directory." >&1 
    return 1 
    fi 
} 

posso quindi eseguire eseguibile foo nella directory .bin come:

nbin foo 
Problemi correlati