2013-11-24 13 views
7

Ho un piccolo modulo Node che include uno script da riga di comando nella directory bin.È possibile includere una riga di comando in un modulo nodo senza installazione globale?

"bin": { 
     "generate": "./bin/generate.js" 
    } 

Lo script generate.js è correttamente eseguibile.

Questo funziona perfettamente se eseguo npm install -g. Ma preferirei non installare a livello globale e solo il comando generate funziona dall'interno della cartella del modulo. Se eseguo npm install dalla cartella del modulo, installa correttamente tutte le dipendenze in una sottodirectory node_modules. Ma poi il comando generate mi da "Nessun file o directory".

Thx.

risposta

11

Non installo mai i moduli nodo utilizzando -g. La mia soluzione per il vostro problema è quello di aggiungere questo al mio $PATH

# add this to ~/.bashrc, ~/.zshrc, or ~/.profile, etc 
export PATH="./node_modules/.bin:$PATH" 

Ora, fino a quando la vostra nella root del vostro modulo, è possibile accedere a qualsiasi file binari che sono stati installati come moduli.


A titolo di esempio, less è comunemente installato con

npm install -g less 

Tuttavia, se avete il vostro percorso modificato come descritto sopra, si potrebbe qualcosa di simile

cd my_node_module 
npm install --save less 
lessc less/style.less css/style.css 

senza il percorso modifica, avresti visto

command not found: lessc 

Se non avete voglia di alterare il vostro percorso, è possibile accedere al binario direttamente

cd my_node_module 
npm install --save lessc 
./node_modules/.bin/lessc a.less a.css 

Yay, non più npm install -g ...

+1

Grazie, la risposta perfetta. Penso che vuoi dire installare npm in meno. (Lessc è il nome di cli) –

+0

Hai ragione; aggiornato –

+1

Un file eseguibile viene creato ogni volta che è globalmente o localmente installato. In quest'ultimo caso, è sufficiente modificare il PERCORSO. – KShirish