วิธีระงับเอาต์พุตเมื่อรันสคริปต์ npm


93

ฉันตัดสินใจทดลองใช้สคริปต์ npm เป็นเครื่องมือสร้างและจนถึงตอนนี้ฉันชอบมัน ปัญหาหนึ่งที่ฉันต้องการแก้ไขคือเมื่อเรียกใช้สคริปต์เพื่อเรียกใช้ jshint เมื่อมีบางสิ่งไม่ผ่านการขุยฉันจะได้รับ "npm ERR!" มากมาย เส้น ฉันต้องการระงับสิ่งเหล่านี้เนื่องจากเอาต์พุตจากลินเตอร์มีความหมายมากกว่า

มีวิธีที่ดีในการตั้งค่านี้ทั่วโลกหรือไม่และมีวิธีตั้งค่าสำหรับการรันสคริปต์แต่ละครั้งหรือไม่

node.js  npm 


มีปัญหาเกี่ยวกับหัวข้อนี้ที่: github.com/npm/npm/issues/6124
daotoad

คำตอบ:


160

สคริปต์ทั้งหมด:

คุณสามารถแก้ไขได้โดยการระงับเอาต์พุตของ npm โดยรวมโดยตั้งค่าระดับการบันทึกsilentเป็นสองวิธี:

ในnpm runการร้องขอแต่ละครั้ง:

npm run --silent <your-script>

หรือทั่วโลกโดยการสร้าง.npmrcไฟล์ (ไฟล์นี้สามารถอยู่ในไดเร็กทอรีโปรเจ็กต์ของคุณหรือโฮมโฟลเดอร์ของคุณก็ได้) ดังต่อไปนี้:

loglevel=silent

แหล่งข้อมูล:

กำหนดค่าระดับการบันทึก npm: https://docs.npmjs.com/misc/config#loglevel

npmrc: https://docs.npmjs.com/misc/config#loglevel

แต่ละสคริปต์ทีละรายการ:

เคล็ดลับง่ายๆที่ฉันใช้ในการแก้ไขปัญหานี้ในบางสคริปต์เช่นการขุยคือการต่อ|| trueท้ายสคริปต์ดังกล่าว สิ่งนี้จะทำงานโดยไม่มีการเปลี่ยนแปลงการกำหนดค่า npm

เพื่อให้แน่ใจว่าสคริปต์จะออกพร้อมกับ0สถานะเสมอ เทคนิคนี้ทำให้คิดว่าสคริปต์ประสบความสำเร็จดังนั้นจึงซ่อนERRข้อความไว้ หากคุณต้องการให้ชัดเจนยิ่งขึ้นคุณสามารถต่อท้าย|| exit 0แทนและควรได้ผลลัพธ์เช่นเดียวกัน

{
  "scripts": {
    "lint": "jshint || true",
   }
}

|| true ใช้งานไม่ได้ถ้าคุณพยายามต่อท้าย args ในตอนท้ายของการรัน npm - เช่น npm รัน myCmd - --deploy
arcseldon

4
นี่เป็นเรื่องเหลวไหลจริงๆ (ไม่ได้โทษคุณ) ฉันไม่ต้องการต่อท้าย|| true; นั่นไม่ใช่ทางออกที่ดี ฉันไม่ต้องการปิดคำสั่งอื่น ๆ ทั้งหมดโดยใช้.npmrc. และการเรียกใช้สคริปต์นี้โดยเฉพาะ-sตลอดเวลาก็ดูเหมือนโง่มาก ใครพบวิธีแก้ปัญหาที่ดีกว่าสำหรับการปิดเสียงสคริปต์เดียวหรือไม่?
PascalVKooten

ในกรณีที่คนอื่นมาในนี้มีเป็นปัญหาเปิด - ดูgithub.com/npm/npm/issues/8821
Ian Routledge

loglevel = เงียบดูเหมือนจะมากเกินไปสำหรับฉัน ซึ่งจะปิดเสียงแม้กระทั่งข้อความแสดงข้อผิดพลาด (แม้ว่าจะยังคงถูกเขียนลงในไฟล์ในเครื่อง) ตามลิงก์ในไม่ช้าหลังจากคำแนะนำนี้ระดับการบันทึกที่เป็นไปได้ตามลำดับความสำคัญ ได้แก่ : "silent", "error", "warn", "notice", "http", "timing", "info", "verbose ", "โง่". ฉันขอแนะนำอย่างใดอย่างหนึ่ง "ข้อผิดพลาด" (ซึ่งจะระงับคำเตือน แต่แสดงข้อผิดพลาด) หรือ "เตือน" (ซึ่งจะรวมถึงคำเตือน) โดยปกติแล้วไม่มีเหตุผลที่ npm จะแสดงให้เราเห็นว่ามันตัดสินใจว่าจะรันอะไรซึ่งเป็นสิ่งที่มันทำโดยค่าเริ่มต้น ที่ให้ความรู้สึกเหมือนการดีบักข้อความ
John Deighan

ตกลงฉันต้องแก้ไขตัวเองและคัดค้าน บางทีมันอาจจะเป็นจุดบกพร่องของ node.js? เมื่อฉันสร้างไฟล์. npmrc ด้วย 'loglevel = error' การเรียกใช้ 'การทดสอบ npm' ยังคงตรวจสอบด้วยตรรกะของ npm เกี่ยวกับวิธีที่กำหนดว่าจะเรียกใช้บรรทัดคำสั่งใด โหนดเวอร์ชัน 8.12.0, npm เวอร์ชัน 5.8.0
John Deighan

44

คุณควรจะสามารถใช้ทั้ง--quietและ--silentตัวเลือกเช่นเดียวกับใน

npm install --quiet

--quietจะแสดง stderr และคำเตือน--silentควรระงับเกือบทุกอย่าง

คุณยังสามารถส่ง stdout / stderr ไป/dev/nullได้เช่น:

npm install > "/dev/null" 2>&1

หรือน้อยกว่า Versbose

npm install &> /dev/null

7
ใน Windows เป็นการติดตั้ง npm - เงียบ> NUL
Manohar Reddy Poreddy

4
คำถามนี้เป็นคำถามเกี่ยวกับการทำงานโดยเฉพาะ NPM สคริปต์
hackel

7
npm install --quiet --no-progress 

จะเก็บคำเตือนและข้อผิดพลาดและระงับแถบความคืบหน้า ADHD บนขั้วที่รองรับ


3
คำถามนี้เป็นคำถามเกี่ยวกับการทำงานโดยเฉพาะ NPM สคริปต์
hackel

1

คุณสามารถทำได้ภายในสคริปต์ของคุณโดยลบผู้ฟังเหตุการณ์

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings

0

สำหรับแต่ละสคริปต์ที่คุณต้องการปิดเสียงโดยไม่ต้องเพิ่ม--silentทุกครั้งคุณสามารถสร้างสคริปต์ใหม่ที่เรียกสคริปต์ก่อนหน้าของคุณและเพิ่ม--silentได้

สคริปต์ตัวอย่างของฉันใน package.json:

    "dev-loud": "npm run build && nodemon -r dotenv/config dist/index.js",
    "dev": "npm run dev-loud --silent"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.