npm: wyłącz skrypt poinstalacyjny dla pakietu

142

Czy istnieje opcja npm, aby wyłączyć skrypt postinstalacyjny podczas instalowania pakietu? Lub do przepisania dowolnego pola z pliku package.json?

farwayer
źródło
Pytanie jest bardzo jasne, ale ... jest przypadkiem to twój koniec goli? github.com/zloirock/core-js#postinstall-message ;-)
conny

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.

Gergo Erdosi
źródło
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
3
Sprawdziłem kod bezpośrednio: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi
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
21

Możesz również włączyć ustawienia w pliku konfiguracyjnym npm.

npm config set ignore-scripts true

Uwaga: spowoduje to wyłączenie skryptów dla wszystkich pakietów NPM.

RoboMex
źródło
2
To powinna być odpowiedź. Zobacz post na blogu npm: blog.npmjs.org/post/141702881055/…
Pieter Venter
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
Alexander Mills
źródło
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
Atul
źródło