2014-11-08 15 views
17

Khi bạn chạy npm test và nó không thành công, bạn sẽ có được kết quả đầu ra thử nghiệm + một thông báo lỗi duy nhất, như vậy:lỗi im lặng về những thất bại cho NPM chạy script

npm ERR! Test failed. See above for more details. 

Tuy nhiên, tôi đã thực hiện một kịch bản tùy chỉnh được gọi lint , giống như vậy:

// package.json 
{ 
    // ... 
    "scripts": { 
    // ... definition for test ... 
    "lint": "./node_modules/jsxhint/cli.js src/", 
    } 
} 

Được rồi, đủ đơn giản. Nhưng khi bạn chạy npm run lint và nó không thành công, chứ không phải lỗi cái nhìn tốt đẹp cho npm test, bạn nhận được một thông báo lỗi khổng lồ sau khi đầu ra của Linter:

npm ERR! Darwin 14.0.0 
npm ERR! argv "node" "/usr/local/bin/npm" "run-script" "lint" 
npm ERR! node v0.10.32 
npm ERR! npm v2.1.7 
npm ERR! code ELIFECYCLE 
# and ~15 more lines... 

Có cách nào để bịt miệng tất cả rác này vì vậy tôi có thể có đầu ra sạch như tập lệnh npm test? Tôi thấy cách họ gặp lỗi trong mã nguồn npm, nhưng tôi không nghĩ rằng tôi chỉ có thể thêm lệnh tùy chỉnh mà không cần giả mạo npm như thế ... Hy vọng tôi sai!

Nhưng nếu tôi, tôi sẽ tốt hơn là chỉ cần đẩy ra một nhiệm vụ như thế này với một công cụ như Grunt? Cảm ơn!

+2

Vấn đề rất khó chịu. Thật lạ khi khó có thể tìm thấy bất kỳ cuộc thảo luận nào về điều này ... –

+0

Đã nhận được khó chịu với cùng xảy ra bằng cách sử dụng 'jscs' như linter trong một tập lệnh chạy. –

+0

Có một vài vấn đề về điều này được nộp trên NPM. https://github.com/npm/npm/issues/6124 https://github.com/npm/npm/issues/8821 – daotoad

Trả lời

1

Tôi vừa cố gắng tìm ra điều tương tự. Không phải là một câu trả lời hoàn hảo nhưng nó loại làm việc để xác định Linting như một kịch bản pretest (docs) như sau:

// package.json 
{ 
    // ... 
    "scripts": { 
    // ... definition for test ... 
    "pretest": "./node_modules/jsxhint/cli.js src/", 
    } 
} 

Sau đó, khi bạn gõ vào npm test lần đầu tiên, bạn sẽ chỉ nhận được một lỗi đơn dòng từ NPM. Rõ ràng, điều đó có nghĩa là bạn sẽ không thể chạy thử nghiệm của bạn nếu bạn không linted.

Tùy chọn khác là sử dụng một số loại nhân viên nhiệm vụ bên thứ ba như Make, Grunt hoặc Gulp.

Tôi chỉ sử dụng Make, và tôi nghĩ rằng đó là thiết lập không đau nhất (ít nhất là trên OSX và Linux, không chắc chắn về Windows).

Tạo một Makefile trong thư mục gốc của bạn trông giống như vậy:

lint: 
    ./node_modules/.bin/jslint ./*.js # or whatever your lint command is 

test: 
    ./node_modules/.bin/mocha test/*.js # or whatever your test command is 

.PHONY: lint test 

Sau đó gõ make testmake lint để chạy những lệnh.

+0

Vâng, bây giờ tôi đã chỉ sử dụng gulp và grunt, nó hoạt động tốt mặc dù cho biết thêm một bước cài đặt thêm cho người chạy CLI và một lệnh khác để nhớ rằng tôi muốn sắp xếp hợp lý. Không phải là một vấn đề lớn nhưng tôi sẽ để lại câu hỏi mở để xem nếu có ai đến với một cái gì đó (và kiểm tra nếu có một vấn đề nộp trên npm cho nó :-)) –

1

Bạn có thể tắt tiếng lỗi theo số redirecting the stderr thành/dev/null. Ví dụ:

{ 
"test": "karma start" (package.json) 
} 

chạy:

$ npm run test 2> /dev/null 

bây giờ sẽ gửi tất cả các lỗi NPM để /dev/null nhưng đầu vào bình thường vẫn sẽ được hiển thị trong giao diện điều khiển.

Bởi vì các lỗi được ném bởi NPM, sau khi nghiệp chướng thoát với một tổ chức phi zero trạng thái, cách làm như sau là không đủ:

{ 
    "test": "karma start 2> /dev/null" 
} 

nhưng bạn có thể khắc phục nó bằng cách tạo ra một nhiệm vụ mà các cuộc gọi mà nhiệm vụ với stderr chuyển hướng:

{ 
    "test": "karma start", 
    "test:silent": "npm run test 2> /dev/null" 
} 

này sẽ đảm bảo rằng các NPM thông báo lỗi được ẩn

19

Sử dụng n pm chạy --silent tùy chọn:

$ npm run --silent test 

Thậm chí ít gõ nếu bạn định nghĩa một bí danh shell:

$ alias run='npm run --silent' 
$ run test 
+0

Hoặc '' 'npm run -s test''' – Rockallite

+2

Không hoạt động cho trường hợp sử dụng của OP. Họ muốn chạy 'npm run lint' trên dòng lệnh và chỉ định trong mục nhập kịch bản trong package.json, rằng tập lệnh lint không nên in thông báo vô dụng. Ví dụ, người ta hy vọng rằng các tập lệnh '": "{" tslint ":" tslint "," lint ":" npm run - tilint tslint src/**/*. Ts "}' có thể hoạt động. Nhưng không. Thông điệp ồn ào vô dụng nôn ra. – daotoad

11

Nếu bạn không quan tâm đến việc bảo tồn các mã trở lại của quá trình Linter, bạn luôn có thể cấu hình của bạn package.json như sau:

{ 
    // ... 
    "scripts": { 
    // ... 
    "lint": "eslint . || true", 
    } 
} 
+2

Bạn cũng có thể cài đặt 'tiền mặt' nếu bạn muốn điều này cũng hoạt động trên các cửa sổ – Tim

Các vấn đề liên quan