Cách chặn đầu ra khi chạy tập lệnh npm


93

Tôi đã quyết định thử nghiệm các tập lệnh npm như một công cụ xây dựng và cho đến nay tôi thích nó. Một vấn đề tôi muốn giải quyết là khi chạy một tập lệnh để chạy jshint khi một cái gì đó không vượt qua linting, tôi nhận được rất nhiều "npm ERR!" các dòng. Tôi muốn loại bỏ những điều này vì đầu ra từ linter có ý nghĩa hơn.

Có cách nào tốt để đặt điều này trên toàn cầu và có cách nào để đặt nó cho mỗi lần chạy tập lệnh không?

node.js  npm 


Có một vấn đề về vấn đề này rất chủ đề tại địa chỉ: github.com/npm/npm/issues/6124
daotoad

Câu trả lời:


160

Tất cả các tập lệnh:

Bạn có thể khắc phục điều này bằng cách chặn đầu ra của npm tổng thể, bằng cách đặt mức nhật ký thành silenttheo một số cách:

Trên mỗi npm runlời gọi:

npm run --silent <your-script>

Hoặc trên toàn cầu bằng cách tạo một .npmrctệp (tệp này có thể nằm trong thư mục dự án hoặc thư mục chính của bạn) với các thông tin sau:

loglevel=silent

Tài nguyên:

cấu hình cấp nhật ký npm: https://docs.npmjs.com/misc/config#loglevel

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

Mỗi tập lệnh, riêng lẻ:

Một mẹo đơn giản mà tôi đã sử dụng để giải quyết vấn đề này trên một số tập lệnh nhất định như linting là thêm || truevào cuối các tập lệnh như vậy. Điều này sẽ hoạt động mà không có bất kỳ thay đổi cấu hình npm nào.

Điều này sẽ đảm bảo rằng tập lệnh sẽ luôn thoát với một 0trạng thái. Điều này đánh lừa npm để nghĩ rằng kịch bản thành công, do đó ẩn các ERRtin nhắn. Nếu bạn muốn rõ ràng hơn, bạn có thể nối thêm || exit 0vào và nó sẽ đạt được kết quả tương tự.

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

|| true sẽ không hoạt động nếu bạn đang cố gắng nối các args vào cuối lần chạy npm - ví dụ:. npm run myCmd - --deploy
arcseldon

4
Điều này thực sự khá vô lý (không trách bạn). Tôi không muốn nối thêm || true; đó không phải là một giải pháp tốt. Tôi không muốn im lặng TẤT CẢ các lệnh khác sử dụng .npmrc. Và việc chạy tập lệnh cụ thể này -sliên tục cũng có vẻ rất ngớ ngẩn. Có ai tìm thấy giải pháp tốt hơn để tắt tiếng một tập lệnh không?
PascalVKooten

Trong trường hợp bất kỳ ai khác gặp phải vấn đề này, đó là một vấn đề mở - hãy xem github.com/npm/npm/issues/8821 .
Ian Routledge

loglevel = im lặng có vẻ quá mức cần thiết đối với tôi. Điều đó sẽ làm im lặng ngay cả các thông báo lỗi (mặc dù chúng vẫn được ghi vào một tệp cục bộ). Theo liên kết ngay sau gợi ý này, các cấp độ nhật ký có thể có, theo thứ tự ưu tiên, là: "im lặng", "lỗi", "cảnh báo", "thông báo", "http", "thời gian", "thông tin", "tiết ", "ngớ ngẩn". Tôi sẽ đề xuất "error" (sẽ loại bỏ cảnh báo, nhưng hiển thị lỗi) hoặc "warning" (sẽ bao gồm cảnh báo). Thông thường, không có lý do gì để npm cho chúng ta thấy cách nó quyết định chạy những gì, đó là những gì nó làm theo mặc định. Điều đó giống như gỡ lỗi văn bản.
John Deighan 28/09/18

Được rồi, tôi cần sửa lại bản thân và đưa ra ý kiến ​​phản đối. Có thể đó thậm chí là một lỗi node.js? Khi tôi tạo tệp .npmrc với 'loglevel = error', việc chạy 'kiểm tra npm' vẫn theo dõi logic của npm về cách nó xác định dòng lệnh nào sẽ chạy. Phiên bản nút 8.12.0, phiên bản npm 5.8.0.
John Deighan 28/09/18

44

Bạn sẽ có thể sử dụng cả tùy chọn --quiet--silenttùy chọn, như trong

npm install --quiet

--quietsẽ hiển thị stderr và cảnh báo, --silentsẽ ngăn chặn gần như mọi thứ

Bạn cũng có thể gửi stdout / stderr tới /dev/null, như sau:

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

hoặc ít so sánh

npm install &> /dev/null

7
Trong Windows, nó là NPM cài đặt --quiet> NUL
Manohar Reddy Poreddy

4
Câu hỏi này đặc biệt về việc chạy các tập lệnh npm .
hackel

7
npm install --quiet --no-progress 

Sẽ giữ các cảnh báo và lỗi, đồng thời chặn thanh tiến trình ADHD trên các thiết bị đầu cuối hỗ trợ nó.


3
Câu hỏi này đặc biệt về việc chạy các tập lệnh npm .
hackel

1

Bạn có thể thực hiện việc này bên trong tập lệnh của mình bằng cách xóa trình nghe sự kiện

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings

0

đối với một tập lệnh riêng lẻ mà bạn muốn giữ im lặng mà không cần phải thêm --silentmỗi lần, bạn có thể tạo một tập lệnh mới gọi tập lệnh trước đó của bạn và thêm vào --silent.

Các tập lệnh ví dụ của tôi trong package.json:

    "dev-loud": "npm run build && nodemon -r dotenv/config dist/index.js",
    "dev": "npm run dev-loud --silent"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.