npm: disabilita lo script postinstall per il pacchetto


Risposte:


267

Non è possibile disabilitare solo gli postinstallscript. Tuttavia, puoi disabilitare tutti gli script usando:

$ npm install --ignore-scripts

Come ha detto Delbertooo nei commenti, questo disabilita anche gli script delle dipendenze.


2
Grazie. Questo è esattamente ciò di cui ho bisogno. Dove posso trovare tali opzioni? Questo non è descritto in 'npm help install', 'npm help config' e 'npm help scripts'.
Farwayer,

3
Ho controllato direttamente il codice: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi,

69
Attenzione! L'opzione --ignore-scriptsdisabilita TUTTI gli script, anche dalle tue dipendenze. Se le tue dipendenze devono eseguire script per installare, ad esempio, alcuni file binari, potrebbero rompersi / essere incompleti.
delbertooo,

7
Quindi esiste una tecnica per installare node_modules (e tutti i loro script) ma ignorare solo gli script del pacchetto principale?
Derrick,

3
Non solo questo, ma --ignore-scripts, o l'opzione di configurazione associata (che ho impostato a livello globale) significherà anche che npm run startnon farà nulla in silenzio e segnalerà il successo. Stupire.
Ash Berlin-Taylor,

21

È inoltre possibile abilitare le impostazioni nel file di configurazione di npm.

npm config set ignore-scripts true

Nota: questo disabiliterà gli script per tutti i pacchetti NPM.


2
Questa dovrebbe essere la risposta. Vedi post sul blog npm: blog.npmjs.org/post/141702881055/…
Pieter Venter

Nota che disabilita anche la possibilità di eseguire manualmente npm run …- semplicemente non farà nulla, senza alcun preavviso.
CodeManX

4

Per fare questo per la tua libreria, ti consiglio qualcosa di semplice come:

#!/usr/bin/env bash

## this is your postinstall.sh script:

set -e;

if [ "$your_pkg_skip_postinstall" == "yes" ]; then
  echo "skipping your package's postinstall routine.";
  exit 0;
fi

quindi installa npm con:

your_pkg_skip_postinstall="yes" npm install

1
Grazie! Funziona alla grande se stai solo cercando di disabilitare il tuo script ma non TUTTI gli script in tutte le dipendenze.
Brian Neisler,

@BrianNeisler siete i benvenuti, è sempre bello aiutare gli altri. A proposito, penso che le doppie parentesi [[]] potrebbero essere migliori delle parentesi singole per la maggior parte dei casi d'uso, non sono sicuro.
Alexander Mills,

2

Volevo disabilitare lo script postinstallazione per il mio progetto, ma volevo che tutti gli script delle dipendenze del mio progetto fossero eseguiti quando lo facevo npm install. Questo è quello che ho finito per fare.

  1. Crea uno script ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. Nel tuo file package.json
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

ora basta impostare la variabile d'ambiente SKIP_BUILD = 1 per impedire la compilazione del pacchetto e le dipendenze verranno compilate correttamente

SKIP_BUILD=1 npm install
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.