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

142

Gibt es eine npm-Option zum Deaktivieren des Nachinstallationsskripts während der Installation des Pakets? Oder um ein Feld aus package.json neu zu schreiben?

Farwayer
quelle
Die Frage ist sehr klar, aber ... ist dies zufällig Ihr Endziel? github.com/zloirock/core-js#postinstall-message ;-)
conny

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.

Gergo Erdosi
quelle
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
21

Sie können die Einstellungen auch in der npm-Konfigurationsdatei aktivieren.

npm config set ignore-scripts true

Hinweis: Dadurch werden Skripte für alle NPM-Pakete deaktiviert.

RoboMex
quelle
2
Dies sollte die Antwort sein. Siehe npm-Blogbeitrag: blog.npmjs.org/post/141702881055/…
Pieter Venter
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
Alexander Mills
quelle
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
Atul
quelle