2016-05-12 18 views
12

Mi piacerebbe installare un hook git pre-commit (che allude il codice) quando qualcuno installa my-package.Come installare git hook su "npm install"?

ho cercato di aggiungere uno script postinstall:

"scripts": { 
    "postinstall": "./scripts/install-git-hooks" 
} 

Questa grande opera. Quando qualcuno esegue npm install, viene installato il gancio pre-commit.

Tuttavia, se another-package dipende my-package, in esecuzione npm install per another-package esegue lo script postinstall pure, che è indesiderato.

Qual è il modo più pulito per evitare questo effetto indesiderato?

+0

Questo sembra un problema XY. Stai chiedendo di Y ma per ottenere risposte che saranno utili nell'immagine più grande dovresti darci informazioni su X. Perché il tuo pacchetto dovrebbe installare git hooks in primo luogo? – Louis

+0

@Louis Mi piacerebbe imporre agli utenti di filtrare il loro codice prima che commettano. Potrei guidare gli utenti a eseguire 'npm eseguire install-git-hooks' dopo aver eseguito' npm install', ma mi piacerebbe automatizzarlo. –

+0

Per la maggior parte dei pacchetti di npm che hanno una routine di post-installazione che è necessario eseguire sul progetto, farlo manualmente. dattilografie, jspm, gelsomino ... ecc. ecc. –

risposta

5

È possibile utilizzare il modulo n. ghooks npm e aggiungerlo come dev-dependency. Puoi configurare cosa eseguire prima di eseguire il commit nel tuo pacchetto.json in questo modo:

[...] 
"config": { 
    "ghooks": { 
     "pre-commit": "npm test" 
    } 
} 
[...] 
3

Hacky, ma potrebbe funzionare per voi.

Il trucco è identificare (all'interno dello script) se si tratta di una dipendenza secondaria o di una dipendenza root per l'installazione NPM. Basta verificare se esiste ../../package.json. Se è così, è una subdipendenza e dovresti saltare l'installazione dei ganci.

Si noti che si stanno violando le regole di installazione coerenti, il che è esattamente contrario allo spirito degli script di installazione. Questo è per installare ganci lato client che non possono essere considerati attendibili con qualsiasi mezzo, se è necessario applicare il linting, questo dovrebbe essere fatto lato server, dove può semplicemente rifiutare il codice non conforme.

Potenzialmente questo problema potrebbe essere risolto meglio come accennato, avendo come script di installazione personalizzato e solo occupandosi del sovraccarico di comunicazione aggiuntivo.