2016-01-14 8 views
12

Voglio copiare automaticamente determinati file da un pacchetto di npmdirectory locale dell'utente dopo l'esecuzioneCome copiare automaticamente i file dal pacchetto alla directory locale tramite lo script npm di postinstall?

npm install my-package

posso farli installato dichiarando "files" all'interno package.json. Il problema è che i file non vengono inseriti nella directory locale. Quindi ho bisogno di eseguire lo script postinstall.

Ma ora non so dove è installato il pacchetto (forse più in alto nella struttura delle directory), quindi come posso accedere in modo affidabile ai file e copiarli nella directory locale tramite lo script?

(By directory locale intendo --- da dove corro npm install my-packagecome utente consumare il pacchetto.)

UPDATE. Sembra che lo script postinstall venga eseguito come processo npm di proprietà con la directory principale node_modules/my-package, quindi non so ancora come accedere alla home directory dell'utente se non con l'ingenuo ../../.

+0

Una vecchia domanda, lo so, ma mi trovo di fronte a un problema simile. Hai mai trovato una buona soluzione per questo? – danielv

+0

@danielv Sì, consultare https://github.com/dmitriz/min-karma –

+0

Grazie. Spero che tu abbia trovato una soluzione più elegante per trovare la directory di installazione di base diversa da '../../'. – danielv

risposta

3

var cwd = require('path').resolve();

Nota: Se gli argomenti per risolvere avere stringhe di lunghezza zero, allora la directory di lavoro corrente verrà utilizzato al posto di loro.

da https://nodejs.org/api/path.html

+0

Sono ancora confuso che è 'cwd' dentro lo script' postinstall' --- la directory locale o dove sono installati i file? –

+0

'cwd' è sempre da dove è stato eseguito un programma. Se hai bisogno di un percorso per il file js corrente da un file stesso ci sono variabili '__filename' e' __dirname' disponibili in ogni file. – hexagoncode

+0

Ho bisogno di un percorso per la directory locale, vedi l'ultima riga nella mia domanda per definire cosa intendo: –

0

userei shellscript/bash

-package.json

"scripts": 
    "postinstall": "./postinstall.sh", 

-postinstall.sh

#!/bin/bash 

# go to YOUR_NEEDED_DIRECTORY .e.g "dist" 
cd YOUR_NEEDED_DIRECTORY 

# copy each file/dir to user dir(~/) 
for node in `ls` 
do 
    cp -R $node ~/$node 
done 

Non dimenticate di!

chmod +x postinstall.sh 
+0

Non è chiaro come ciò possa essere d'aiuto, ho ancora bisogno di sapere come fare riferimento alla directory locale in questo codice, quindi lo stesso problema rimane. –