npm: wyłącz skrypt poinstalacyjny dla pakietu


Odpowiedzi:


267

Nie można wyłączyć tylko postinstallskryptów. Możesz jednak wyłączyć wszystkie skrypty za pomocą:

$ npm install --ignore-scripts

Jak wspomniał delbertooo w komentarzach, powoduje to również wyłączenie skryptów zależności.


2
Dzięki. Właśnie tego potrzebuję. Gdzie mogę znaleźć takie opcje? Nie jest to opisane w sekcjach „npm help install”, „npm help config” i „npm help scripts”.
farwayer


69
Uwaga! Opcja --ignore-scriptswyłącza WSZYSTKIE skrypty - nawet z twoich zależności. Jeśli twoje zależności muszą uruchamiać skrypty, aby np. Zainstalować jakieś pliki binarne, mogą się zepsuć / być niekompletne.
delbertooo

7
Czy istnieje więc technika instalowania modułów node_modules (i wszystkich ich skryptów), ale ignorowania tylko skryptów głównego pakietu?
Derrick

3
Nie tylko to, ale --ignore-scriptslub powiązana opcja konfiguracji (którą ustawiłem globalnie) będzie również oznaczać, że npm run startpo cichu nic nie zrobi i zgłosi sukces. Zadziwiać.
Ash Berlin-Taylor


4

Aby zrobić to dla własnej biblioteki, polecam coś prostego, na przykład:

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

następnie wykonaj instalację npm za pomocą:

your_pkg_skip_postinstall="yes" npm install

1
Dzięki! Działa to świetnie, jeśli próbujesz tylko wyłączyć własny skrypt, ale nie WSZYSTKIE skrypty we wszystkich zależnościach.
Brian Neisler

@BrianNeisler bardzo mile widziany, zawsze dobrze jest pomagać innym ludziom. Nawiasem mówiąc, myślę, że podwójne nawiasy [[]] mogą być lepsze niż pojedyncze nawiasy w większości przypadków użycia, ale nie jestem pewien.
Alexander Mills,

2

Chciałem wyłączyć skrypt poinstalacyjny dla mojego projektu, ale chciałem, aby wszystkie skrypty zależności mojego projektu działały, gdy to zrobię npm install. Oto, co ostatecznie zrobiłem.

  1. Utwórz skrypt ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. W pliku package.json
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

teraz po prostu ustaw zmienną środowiskową SKIP_BUILD = 1, aby zapobiec budowaniu pakietu, a twoje zależności będą się budować dobrze

SKIP_BUILD=1 npm install
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.