npm: nonaktifkan script postinstall untuk paket


Jawaban:


267

Tidak mungkin untuk menonaktifkan hanya postinstallskrip. Namun, Anda dapat menonaktifkan semua skrip menggunakan:

$ npm install --ignore-scripts

Seperti yang disebutkan delbertooo dalam komentar, ini juga menonaktifkan skrip dependensi.


2
Terima kasih. Inilah yang saya butuhkan. Di mana saya dapat menemukan opsi seperti itu? Ini tidak dijelaskan dalam 'npm help install', 'npm help config' dan 'npm help scripts'.
farwayer

3
Saya memeriksa kode secara langsung: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi

69
Peringatan! Opsi ini --ignore-scriptsmenonaktifkan SEMUA skrip - bahkan dari dependensi Anda. Jika dependensi Anda perlu menjalankan skrip untuk mis. Menginstal beberapa binari, mereka mungkin rusak / tidak lengkap.
delbertooo

7
Jadi adakah teknik untuk menginstal node_modules (dan semua skripnya) tetapi abaikan saja skrip paket utama?
Derrick

3
Bukan hanya ini, tetapi --ignore-scripts, atau opsi konfigurasi terkait (yang saya tetapkan secara global) juga akan berarti bahwa npm run startdiam-diam tidak akan melakukan apa-apa dan melaporkan keberhasilan. Menakjubkan.
Ash Berlin-Taylor


4

Untuk melakukan ini untuk perpustakaan Anda sendiri, saya sarankan sesuatu yang sederhana seperti:

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

kemudian lakukan instalasi npm Anda dengan:

your_pkg_skip_postinstall="yes" npm install

1
Terima kasih! Ini berfungsi baik jika Anda hanya mencoba untuk menonaktifkan skrip Anda sendiri tetapi tidak SEMUA skrip di semua dependensi.
Brian Neisler

@BrianNeisler Anda sangat menyambut, selalu merasa baik untuk membantu orang lain. Ngomong-ngomong, saya pikir kurung ganda [[]] mungkin lebih baik daripada kurung tunggal untuk sebagian besar kasus penggunaan, tidak yakin tho.
Alexander Mills

2

Saya ingin menonaktifkan skrip postinstall untuk proyek saya tetapi ingin agar semua skrip dependensi proyek saya berjalan ketika saya melakukannya npm install. Inilah yang akhirnya saya lakukan.

  1. Buat skrip ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. Dalam file package.json Anda
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

sekarang hanya mengatur variabel lingkungan SKIP_BUILD = 1 untuk mencegah paket Anda dari membangun dan dependensi Anda akan dibangun dengan baik

SKIP_BUILD=1 npm install
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.