2016-02-19 27 views
11

Tôi đang chạy NPM phiên bản 3.6.0 và nút verison 5.6.0 trên Windows 10:cập nhật NPM -g không có gì mặc dù tôi đã lỗi thời gói

> npm version 
{ npm: '3.6.0', 
    ares: '1.10.1-DEV', 
    http_parser: '2.6.1', 
    icu: '56.1', 
    modules: '47', 
    node: '5.6.0', 
    openssl: '1.0.2f', 
    uv: '1.8.0', 
    v8: '4.6.85.31', 
    zlib: '1.2.8' } 
> 

Tôi có một số gói NPM cài đặt trên toàn cầu:

> npm ls -g --depth=0 
C:\Users\Klas\AppData\Roaming\npm 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
`-- [email protected] 

> 

Nếu tôi chạy npm outdated -g một số gói được liệt kê là lỗi thời.

> npm outdated -g 
Package  Current Wanted Latest Location 
jspm   0.16.25 0.16.25 0.16.29 
live-server 0.9.0 0.9.0 0.9.2 
protractor  3.0.0 3.0.0 3.1.1 
tslint   3.2.2 3.2.2 3.4.0 
webpack  1.12.11 1.12.11 1.12.13 

Khi tôi chạy npm update -g nó trả về (sau một vài giây) mà không có bất kỳ cảnh báo hoặc thông báo lỗi nào. Tuy nhiên, không có gói nào được cập nhật.

> npm update -g 
> 

Như tôi đã giải thích this issue, npm update -g nên làm việc, và sẽ cập nhật các gói toàn cầu cấp cao nhất. Nhưng nó dường như không hiệu quả với tôi.

Nếu tôi chạy (nhờ Benjamin Kaiser for the tip):

> npm update -g --loglevel verbose 

tôi nhận được rất nhiều đầu ra. Điều này có vẻ phù hợp nhất:

npm verb outdated not updating tslint because it's currently at the maximum version 
that matches its specified semver range 

Tôi vẫn chưa hiểu lắm. Kể từ khi các gói là toàn cầu, không có phạm vi semver được chỉ định?

Chạy cập nhật trên một gói cụ thể không giúp được gì:

> npm update -g tslint 
> 

Thậm chí xác định một phiên bản không có bất kỳ sự khác biệt:

> npm update -g [email protected] 
> 

Nhưng thậm chí nếu điều đó đã làm việc tôi không muốn phải cập nhật rõ ràng từng gói. Đối với tôi, một tính năng chính của trình quản lý gói phải giúp dễ dàng cập nhật mọi thứ cùng một lúc.

This issue âm thanh có liên quan. Nhưng khi tôi nhìn vào tslint npm module "mới nhất" có vẻ là 3.4.0. Vậy tại sao không nâng cấp?

+1

Bạn đã thử thêm cờ '--loglevel verbose' để xem có điều gì xảy ra ở mức nhật ký thấp hơn không? Từ mọi thứ bạn đã nói, phiên bản npm của bạn phải được cập nhật để chạy lệnh đó. –

+0

Cảm ơn @BenjaminKaiser, tôi đã mở rộng câu hỏi của mình với kết quả thiết lập cờ –

+1

Điều đó thật kỳ lạ, bạn nói đúng là nó toàn cầu và vì thế không nên có một semver. Tôi có thể thử xóa các gói toàn cầu bắt đầu lại. Có lẽ cài đặt lại npm cũng lên phiên bản mới nhất (3.7.4 tôi nghĩ) –

Trả lời

10

npm -g update có, uh, hành vi khá bất ngờ. Đây có thể là giải pháp phù hợp:

$ npm -g outdated --parseable=true | cut -d : -f 4 | xargs -n 1 npm -g install 
+0

Cảm ơn - đây là một giải pháp tốt, và chắc chắn có hành vi tương tự mà tôi mong đợi từ 'npm -g update'. – lantrix

+0

Câu trả lời hay! – huachengzan

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