npm: ปิดใช้งานสคริปต์ postinstall สำหรับแพ็คเกจ


142

มีตัวเลือก npm หรือไม่ที่จะปิดใช้งานสคริปต์ postinstall ขณะติดตั้งแพคเกจ? หรือสำหรับการเขียนฟิลด์ใด ๆ จาก package.json


คำถามที่มีความชัดเจนมาก แต่ ... โดยโอกาสนี้สิ้นเป้าหมายของคุณ? github.com/zloirock/core-js#postinstall-message ;-)
conny

คำตอบ:


267

ไม่สามารถปิดการใช้งานpostinstallสคริปต์เท่านั้น อย่างไรก็ตามคุณสามารถปิดการใช้งานสคริปต์ทั้งหมดโดยใช้:

$ npm install --ignore-scripts

ดังที่ delbertooo กล่าวถึงในความคิดเห็นสิ่งนี้ยังปิดใช้งานสคริปต์ของการอ้างอิง


2
ขอบคุณ. นี่คือสิ่งที่ฉันต้องการ ฉันจะหาตัวเลือกดังกล่าวได้ที่ไหน ไม่ได้อธิบายไว้ใน 'การติดตั้งวิธีใช้ npm', 'การช่วยเหลือ npm config' และ 'สคริปต์ความช่วยเหลือ npm'
ชาวนา

3
ฉันตรวจสอบรหัสโดยตรง: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi

69
ข้อควรระวัง! ตัวเลือก--ignore-scriptsปิดการใช้งานสคริปต์ทั้งหมด - แม้กระทั่งจากการอ้างอิงของคุณ หากการอ้างอิงของคุณจำเป็นต้องเรียกใช้สคริปต์เพื่อเช่นติดตั้งไบนารีบางอย่างพวกเขาอาจแตก / ไม่สมบูรณ์
delbertooo

7
ดังนั้นจึงมีเทคนิคในการติดตั้ง node_modules (และสคริปต์ทั้งหมด) แต่ไม่สนใจเฉพาะสคริปต์ของแพ็คเกจหลักเท่านั้น
ปั้นจั่น

3
ไม่เพียงแค่นี้ แต่--ignore-scriptsหรือตัวเลือกการกำหนดค่าที่เกี่ยวข้อง (ซึ่งฉันตั้งไว้ทั่วโลก) ก็จะหมายถึงว่าnpm run startจะไม่ทำอะไรเลยและรายงานความสำเร็จอย่างเงียบ ๆ ตะลึงพรึงเพริด.
Ash Berlin-Taylor

21

คุณยังสามารถเปิดใช้งานการตั้งค่าในไฟล์กำหนดค่า npm

npm config set ignore-scripts true

หมายเหตุ: สิ่งนี้จะปิดใช้งานสคริปต์สำหรับแพ็คเกจ NPM ทั้งหมด


2
นี่ควรเป็นคำตอบ ดูโพสต์บล็อก npm: blog.npmjs.org/post/141702881055/…
Pieter Venter

โปรดทราบว่ามันยังปิดการใช้งานความสามารถในการดำเนินการด้วยตนเองnpm run …- มันจะไม่ทำอะไรเลยโดยไม่มีการเตือนใด ๆ
CodeManX

4

ในการทำเช่นนี้กับห้องสมุดของคุณฉันขอแนะนำสิ่งที่ง่าย ๆ เช่น:

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

จากนั้นทำการติดตั้ง NPM ด้วย:

your_pkg_skip_postinstall="yes" npm install

1
ขอบคุณ! วิธีนี้ใช้งานได้ดีถ้าคุณเพียงแค่พยายามปิดใช้งานสคริปต์ของคุณเอง แต่ไม่ใช่สคริปต์ทั้งหมดในการอ้างอิงทั้งหมด
Brian Neisler

@BrianNeisler ยินดีต้อนรับมากรู้สึกดีเสมอที่จะช่วยเหลือผู้อื่น โดยวิธีการที่ฉันคิดว่าวงเล็บคู่ [[]] อาจจะดีกว่าวงเล็บเดียวสำหรับกรณีการใช้งานส่วนใหญ่ไม่แน่ใจว่าสรรพสินค้าใหญ่
Alexander Mills

2

ฉันต้องการที่จะปิดการใช้งานสคริปต์ postinstall สำหรับโครงการของฉัน npm installแต่อยากสคริปต์ทั้งหมดของการอ้างอิงโครงการของฉันที่จะทำงานเมื่อฉันทำ นี่คือสิ่งที่ฉันทำ

  1. สร้างสคริปต์ ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. ในไฟล์ package.json ของคุณ
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

ตอนนี้เพียงแค่ตั้งค่าตัวแปรสภาพแวดล้อม SKIP_BUILD = 1 เพื่อป้องกันไม่ให้แพคเกจของคุณจากการสร้างและการพึ่งพาของคุณจะสร้างได้ดี

SKIP_BUILD=1 npm install
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.