npm: Deaktivieren Sie das Postinstall-Skript für das Paket


Antworten:


267

Es ist nicht möglich, nur postinstallSkripte zu deaktivieren . Sie können jedoch alle Skripte deaktivieren, indem Sie:

$ npm install --ignore-scripts

Wie in den Kommentaren erwähnt, deaktiviert dies auch die Skripte der Abhängigkeiten.


2
Vielen Dank. Genau das brauche ich. Wo finde ich solche Optionen? Dies wird nicht in 'npm help install', 'npm help config' und 'npm help scripts' beschrieben.
Farwayer

3
Ich habe den Code direkt überprüft: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi

69
Vorsicht! Die Option --ignore-scriptsdeaktiviert ALLE Skripte - auch von Ihren Abhängigkeiten. Wenn Ihre Abhängigkeiten Skripte ausführen müssen, um beispielsweise einige Binärdateien zu installieren, können diese beschädigt / unvollständig sein.
Delbertooo

7
Gibt es dann eine Technik, um node_modules (und alle ihre Skripte) zu installieren, aber nur die Skripte des Hauptpakets zu ignorieren?
Derrick

3
Nicht nur das, sondern --ignore-scriptsauch die zugehörige Konfigurationsoption (die ich global festgelegt habe) bedeutet, dass npm run startim Stillen nichts unternommen wird und der Erfolg gemeldet wird. Erstaunen.
Ash Berlin-Taylor


4

Um dies für Ihre eigene Bibliothek zu tun, empfehle ich etwas Einfaches wie:

#!/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

Dann installieren Sie Ihre npm mit:

your_pkg_skip_postinstall="yes" npm install

1
Vielen Dank! Dies funktioniert hervorragend, wenn Sie nur versuchen, Ihr eigenes Skript zu deaktivieren, jedoch nicht ALLE Skripte in allen Abhängigkeiten.
Brian Neisler

@BrianNeisler yer sehr willkommen, fühlt sich immer gut an, anderen Menschen zu helfen. Übrigens denke ich, dass doppelte Klammern [[]] für die meisten Anwendungsfälle besser sein könnten als einfache Klammern, obwohl ich nicht sicher bin.
Alexander Mills

2

Ich wollte das Nachinstallationsskript für mein Projekt deaktivieren, wollte aber, dass alle Skripte der Abhängigkeiten meines Projekts ausgeführt werden, wenn ich dies tue npm install. Das habe ich letztendlich getan.

  1. Erstellen Sie ein Skript ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. In Ihrer package.json-Datei
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

Setzen Sie jetzt einfach die Umgebungsvariable SKIP_BUILD = 1, um zu verhindern, dass Ihr Paket erstellt wird und Ihre Abhängigkeiten einwandfrei erstellt werden

SKIP_BUILD=1 npm install
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.