npm: nonaktifkan script postinstall untuk paket

142

Apakah ada opsi npm untuk menonaktifkan skrip postinstall saat menginstal paket? Atau untuk menulis ulang bidang apa saja dari package.json?

penjelajah jauh
sumber
Pertanyaannya sangat jelas, tetapi ... apakah ini tujuan akhir Anda? github.com/zloirock/core-js#postinstall-message ;-)
conny

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.

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

Anda juga dapat mengaktifkan pengaturan di file konfigurasi npm.

npm config set ignore-scripts true

Catatan: Ini akan menonaktifkan skrip untuk semua paket NPM.

RoboMex
sumber
2
Ini seharusnya jawabannya. Lihat posting blog npm: blog.npmjs.org/post/141702881055/…
Pieter Venter
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
Alexander Mills
sumber
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
Atul
sumber