Làm cách nào để cập nhật từng phụ thuộc trong gói.json lên phiên bản mới nhất?


2011

Tôi đã sao chép gói.json từ một dự án khác và bây giờ muốn chuyển tất cả các phụ thuộc sang các phiên bản mới nhất của chúng vì đây là một dự án mới và tôi không ngại sửa chữa một cái gì đó nếu nó bị hỏng.

Cách dễ nhất để làm điều này là gì?

Cách tốt nhất mà tôi biết bây giờ là chạy npm info express versionrồi cập nhật gói.json theo cách thủ công cho từng cái. Phải có cách tốt hơn.

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

CẬP NHẬT 5/1/19 : Sáu năm sau và tôi vẫn đang duy trì npm-check-update như một giải pháp toàn diện cho vấn đề này. Thưởng thức!


2
Tuyệt vời để xem một cách tiếp cận khác cho vấn đề này. Tôi thực sự thích đầu ra của Salita. Một số tính năng hay mà công cụ tôi đóng góp bây giờ, github.com/tjunnone/npm-check-updates, đang duy trì ngữ nghĩa phiên bản (như 1.x hoặc> 2.1.0) và chỉ lọc theo tên / regex / devDeps.
Raine Revere

1
Có NHU CẦU để có một số câu trả lời tốt hơn ở đây. Rõ ràng với độ phân giải phụ thuộc, bạn không thể luôn có phiên bản mới nhất của mọi thứ. Tối đa hóa số lượng lớn nhất các phiên bản mới nhất của các mô-đun chỉ là một số vấn đề tối ưu hóa. Nhưng NPM không biết mô-đun nào bạn muốn gần đây nhất hơn các mô-đun khác. Sẽ thật tuyệt nếu có một cái gì đó như thế này: cập nhật npm --flest xyz, trong đó xyz là các mô-đun bạn muốn gần đây nhất có thể và tất cả các mô-đun khác sẽ tuân theo phiên bản tương thích gần đây nhất của chúng.
Alexander Mills

2
npm sẽ xử lý chính xác xung đột phiên bản giữa các phụ thuộc được chia sẻ bằng cách tải xuống chính xác cho từng phụ thuộc. Vì vậy, nếu Dep A phụ thuộc vào Dep C v1.0.0 và Dep B phụ thuộc vào Dep C v2.0.0, thì mỗi cái sẽ được cài đặt và sử dụng một cách thích hợp. Do đó, bạn có thể tự do cài đặt gói mới nhất của bất kỳ gói nào bạn muốn.
Raine Revere

Hãy thử điều này để buộc nâng cấp:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey

Tôi luôn luôn kiểm tra câu trả lời này. Nhưng tôi thấy rằng nó đã trượt trong kết quả của Google. Hy vọng bình luận này sẽ giúp đẩy sự liên quan của nó trở lại !!
Zach Smith

Câu trả lời:


2391

Có vẻ như npm-check-update là cách duy nhất để thực hiện điều này ngay bây giờ.

npm i -g npm-check-updates
ncu -u
npm install

Vào npm <3.11:

Chỉ cần thay đổi phiên bản của mọi phụ thuộc thành *, sau đó chạy npm update --save. ( Lưu ý: bị hỏng trong các phiên bản (3.11) gần đây của npm ).

Trước:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

Sau:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

Tất nhiên, đây là cái búa cùn của việc cập nhật phụ thuộc. Sẽ tốt thôi nếu như bạn nói, thì dự án này trống rỗng và không có gì có thể phá vỡ.

Mặt khác, nếu bạn đang làm việc trong một dự án trưởng thành hơn, có lẽ bạn muốn xác minh rằng không có thay đổi vi phạm nào trong các phụ thuộc của bạn trước khi nâng cấp.

Để xem các mô-đun đã lỗi thời, chỉ cần chạy npm outdated. Nó sẽ liệt kê bất kỳ phụ thuộc được cài đặt có sẵn phiên bản mới hơn.


13
@thefourtheye: Nói chung, bạn không nên rời khỏi pack.json *vì cuối cùng bạn có thể tự động cài đặt phiên bản mô-đun mới với các thay đổi phá vỡ ứng dụng của bạn. Vì chúng tôi đang sử dụng --saveở đây, nên *phiên bản hiện tại của mỗi gói.
josh3736

50
Tôi không thể làm việc này. Có điều gì đó đã thay đổi với npm kể từ khi câu trả lời này được đăng? Khi tôi sử dụng ký tự đại diện và sau đó npm install --saveký tự đại diện được để lại trong tôi package.json.
davidtheclark

15
Thật không may, sử dụng updatekhông làm việc, đối với tôi. Tôi vẫn còn lại với các ký tự đại diện. Có tài liệu nào về điều này mà bạn biết hoặc bất kỳ tài nguyên nào khác tôi có thể xem không?
davidtheclark

120
Một chút cũ nhưng điều đó có thể giúp đỡ người khác: github.com/tjunnone/npm-check-updates | Sử dụng npm install -g npm-check-updatesđể cài đặt, sau đó npm-check-updateskiểm tra xem phần phụ thuộc của bạn có bản cập nhật hay không và npm-check-updates -uđể cập nhật các phiên bản pack.json của bạn. Sau đó, nó chỉ npm installvà nó sẽ tải về các phiên bản mới.
RaphaelDDL

5
Vấn đề của bạn có lẽ đến từ việc bạn cố gắng cập nhật các gói dev bằng cách gõ npm update --savethay vì npm update --save-dev.
adriendenat

1035

npm-check-updates là một tiện ích tự động điều chỉnh gói.json với phiên bản mới nhất của tất cả các phụ thuộc

xem https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

[EDIT] Một cách ít xâm phạm hơn (tránh cài đặt toàn cầu) để thực hiện việc này nếu bạn có phiên bản hiện đại npmlà:

$ npx npm-check-updates -u
$ npm install 

135
Điều này nên có sẵn tự nhiên thông qua lệnh npm, thực sự là giải pháp tốt nhất cho đến nay để cập nhật các phụ thuộc.
Mohammad Arif

7
Nên là một phần của npm hữu, hoàn toàn đồng ý. Tuy nhiên, nó không phải là và giải pháp này đến như một làn gió. Cảm ơn bạn.
Stefan

2
tôi giả sử các bạn đang đẩy [HARD] để đưa điều này vào npm cốt lõi?
enorl76

3
@Batman Có nếu bạn không cài đặt trước đó. Nếu không sử dụng cập nhật npm. ncu chỉ cập nhật gói.json. Nó không cài đặt hoặc cập nhật 'node_modules'.
Muzaffer

1
gói vô dụng, chỉ cập nhật một phần của gói ncu -a, không cập nhật gói.json.
Alexander Kim

385

Cập nhật cho NPM mới nhất

npm 2+ (Nút 0.12+):


npm outdated
npm update
git commit package-lock.json

Npm cổ đại (khoảng năm 2014):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

Hãy chắc chắn thu nhỏ deps của bạn, hoặc bạn có thể kết thúc với một dự án đã chết. Tôi đã rút ra một dự án vào một ngày khác và nó sẽ không chạy vì các kho của tôi đã hết hạn / cập nhật / một mớ hỗn độn. Nếu tôi thu nhỏ lại, npm sẽ cài đặt chính xác những gì tôi cần.


Chi tiết

Đối với những người tò mò đã làm cho nó đến nay, đây là những gì tôi khuyên bạn nên:

Sử dụng npm-check-updateshoặc npm outdatedđể đề xuất các phiên bản mới nhất.

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

Sau đó thực hiện cài đặt sạch (w / o rm tôi nhận được một số cảnh báo phụ thuộc)

$ rm -rf node_modules
$ npm install 

Cuối cùng, lưu các phiên bản chính xác npm-shrinkwrap.jsonvớinpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Bây giờ, npm installsẽ sử dụng các phiên bản chính xác trongnpm-shrinkwrap.json

Nếu bạn đăng ký npm-shrinkwrap.jsonvào git, tất cả các cài đặt sẽ sử dụng các phiên bản chính xác giống nhau.

Đây là một cách để chuyển từ phát triển (tất cả các bản cập nhật, mọi lúc) sang sản xuất (không ai chạm vào gì cả).

Sợi ps đang gửi danh sách gói của bạn đến Facebook .


13
Đây là câu trả lời đúng thực tế. với hàng tá deps được cài đặt, đây là một cách tốt hơn
Angel S. Moreno

6
Từ kinh nghiệm, lời khuyên để luôn cập nhật tất cả các gói cùng một lúc có thể nguy hiểm.
alphadogg

1
Chắc chắn. Nếu bạn tạo và npm-shrinkwrap.jsonvào nguồn và cam kết bất cứ khi nào bạn cập nhật, bạn luôn có thể 'quay lại nơi bạn đang ở'. Tôi đã bỏ qua tính năng thu nhỏ khi tôi bắt đầu.
Michael Cole

21
Điều này không trả lời câu hỏi. Câu hỏi là làm thế nào để cập nhật phiên bản mới nhất . npm updatechỉ cập nhật cho phiên bản semver, không phải mới nhất.
gman

1
Bạn có thể trả lời nếu có một sự thay thế yarn upgrade package@version?
Ben Sinclair

201

Để cập nhật một phụ thuộc lên phiên bản mới nhất của nó mà không cần phải tự mở package.jsonvà thay đổi nó, bạn có thể chạy

npm install {package-name}@* {save flags?}

I E

npm install express@* --save

Để tham khảo, npm-install


Theo ghi nhận của người dùng Vespakoen về một chỉnh sửa bị từ chối, bạn cũng có thể cập nhật nhiều gói cùng một lúc theo cách này:

npm install --save package-nave@* other-package@* whatever-thing@*

Ông cũng đánh giá một lớp lót cho vỏ dựa trên npm outdated. Xem chỉnh sửa cho mã và giải thích.


PS: Tôi cũng ghét phải chỉnh sửa thủ công package.jsoncho những thứ như vậy;)


8
Giải pháp này là tuyệt vời. Cách nhanh chóng và dễ dàng để cập nhật rõ ràng một gói duy nhất lên phiên bản mới nhất mà không cần cài đặt bất kỳ mô-đun mới nào. Tôi thích npm-check-update, nhưng afaik nó cố gắng cập nhật tất cả các gói, đây không phải là điều bạn muốn.
Chev

điều này không hiệu quả với tôinpm install react-native-image-picker@* --save
Harry Moreno

1
@Chev: ncu có thể dễ dàng nhắm mục tiêu một hoặc một vài gói với ncu express mocha chai. Bạn cũng có thể loại trừ các gói với ncu -x mocha. Tôi đồng ý ở trên là giải pháp đơn giản nhất mặc dù để cập nhật một gói duy nhất.
Raine Revere

2
Tôi chỉ sử dụng một cái gì đó tương tự hoạt động, từ các tài liệu gần đây hơn ... sử dụng "mới nhất" thay vì "*"npm install {package-name}@latest {save flags}
Drew Thomas

1
Rất cám ơn, giải pháp này là tuyệt vời và chính xác những gì tôi đang tìm kiếm. Nó cho phép bạn cập nhật một gói cụ thể mà không cần cập nhật mọi phụ thuộc khác có thể dẫn đến các vấn đề không lường trước được!
Dany Wehbe

90

Nếu bạn tình cờ sử dụng Visual Studio Code làm IDE, đây là một tiện ích nhỏ thú vị để thực hiện cập nhật package.jsonquy trình một cú nhấp chuột.

Phiên bản ống kính

nhập mô tả hình ảnh ở đây


2
Có phiên bản văn bản 3 tuyệt vời ở đây: github.com/yavoursky/Bump , mặc dù hơi chậm.
Alexander Kim

4
Hoạt động rất đẹp, trong trường hợp không rõ ràng với bất kỳ ai, việc này chỉ đơn giản là kiểm tra các phiên bản trong gói.json của bạn so với các phiên bản kho lưu trữ npm mới nhất và cho phép bạn nhấp vào một phiên bản để cập nhật nội dung văn bản trong gói.json của bạn. Sau đó, bạn cần chạy "cập nhật npm" để báo cho npm để cài đặt các phiên bản mới.
MattG

2
Lưu ý rằng bạn có thể thấy phiên bản mới nhất của các phụ thuộc gói với một mô tả ngắn gọn trong Visual Studio Code tích hợp bằng cách di chuột vào mục nhập gói: Gợi ý phiên bản gói
sẵn Gint

1
Lưu ý rằng nó không tự động cài đặt các gói khi nhấp vào liên kết ống kính mã! Nó chỉ đơn giản là cập nhật văn bản phiên bản pack.json.
RA.

59

Điều này hoạt động kể từ npm 1.3.15.

"dependencies": {
  "foo": "latest"
}

10
Tốt để biết. Tôi đoán là điều này thường sẽ là một thực tiễn tồi trên bất kỳ trang web sản xuất nào vì nó sẽ tự động cập nhật lên các phiên bản không tương thích ngược. Cú pháp '~ 2' khóa bạn vào một số phiên bản chính cụ thể, theo sau đó, semver sẽ tương thích ngược.
Raine Revere

1
Bạn luôn có thể đóng băng deps trên prod. Có một lệnh cho điều đó. -2 âm thanh ok.
Tobiasz Cudnik

5
Tôi thích sử dụng điều này cùng với npm shrinkwrapđóng băng deps.
daniellmb

Nếu chúng ta làm điều này, thì làm sao chúng ta biết phiên bản thực sự của gói đó? Nói rằng tôi đã có một mục được gọi "react": "16.9.0"và sau đó tôi đã thêm mới nhất vào nó và chạy npm i, sau này làm thế nào để tôi tìm thấy phiên bản phản ứng nào hiện có trong dự án của tôi? kể từ khi "react":"latest"là whats còn lại trong package.json của tôi, không phải là một số chẵn sau khi tôi đã làmnpm i
theprogrammer

52
  1. Sử dụng *làm phiên bản cho các bản phát hành mới nhất, bao gồm cả không ổn định
  2. Sử dụng latestlàm định nghĩa phiên bản cho phiên bản ổn định mới nhất
  3. Sửa đổi gói.json với chính xác số phiên bản ổn định mới nhất bằng cách sử dụng LatestStablePackages

Đây là một ví dụ:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

2
Đây là câu trả lời tốt nhất.
Peza

1
đây phải là câu trả lời được chấp nhận
EigenFool 23/12/19

vẫn là cách tiếp cận an toàn nhất để thực hiện. Câu trả lời tốt.
klewis

43

Nhắc nhở duy nhất tôi đã tìm thấy với câu trả lời tốt nhất ở trên là nó cập nhật các mô-đun lên phiên bản mới nhất. Điều này có nghĩa là nó có thể cập nhật lên bản dựng alpha không ổn định.

Tôi sẽ sử dụng tiện ích npm-check-Updates đó. Nhóm của tôi đã sử dụng công cụ này và nó hoạt động hiệu quả bằng cách cài đặt các bản cập nhật ổn định.

Như Etienne đã nêu ở trên: cài đặt và chạy với điều này:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 

3
rm -rf node_modulestrước khi npm installthoát khỏi một số cảnh báo phụ thuộc cho tôi.
Michael Cole

1
Chỉ trong trường hợp bạn có "*" trong gói.json, chỉ cần thay đổi thành "0" hoặc "0.0" hoặc "0.0.0" trước khi chạy npm-check-update.
igorpavlov

Đây là cách dễ nhất để làm điều đó. Không rắc rối không rassle. Hoạt động như một lá bùa. Tất cả các deps của bạn được cập nhật và cài đặt đúng. Thx
Yoraco Gonzales

38

Để xem gói nào có sẵn phiên bản mới hơn, sau đó sử dụng lệnh sau:

npm outdated

để cập nhật chỉ một phụ thuộc, chỉ cần sử dụng lệnh sau:

npm install yourPackage@latest --save

Ví dụ:

package.jsonTập tin của tôi có sự phụ thuộc:

"@progress/kendo-angular-dateinputs": "^1.3.1",

sau đó tôi nên viết:

npm install @progress/kendo-angular-dateinputs@latest --save

Đẹp nhưng có vẻ như --save (hoặc --save-dev) không bắt buộc phải cập nhật.
Burrich

35

Tôi thực sự thích cách npm-nâng cấp hoạt động. Nó là một tiện ích dòng lệnh đơn giản đi qua tất cả các phụ thuộc của bạn và cho phép bạn xem phiên bản hiện tại so với phiên bản mới nhất và cập nhật nếu bạn muốn.

Dưới đây là một ảnh chụp màn hình về những gì xảy ra sau khi chạy npm-upgradetrong thư mục gốc của dự án của bạn (bên cạnh package.jsontệp):

ví dụ nâng cấp npm

Đối với mỗi phụ thuộc, bạn có thể chọn nâng cấp, bỏ qua, xem thay đổi hoặc hoàn tất quy trình. Nó đã làm việc rất tốt cho tôi cho đến nay.

EDIT: Để rõ ràng đây là gói bên thứ ba cần được cài đặt trước khi lệnh sẽ hoạt động. Nó không đi kèm với npm chính nó:

npm install -g npm-upgrade

Sau đó, từ thư mục gốc của một dự án có tệp pack.json:

npm-upgrade

Nhìn vào các tài liệu có vẻ như nó chỉ được xây dựng để hoạt động với các phụ thuộc địa phương
manncito

2
vâng, chỉ đề cập đến những người khác. Không có khiếu nại chống lại câu trả lời :)
Martin Schneider

2
Hmm, npm-upgradekhông làm việc cho tôi, nhưng npm upgradeđã làm và nó đã cập nhật tệp pack.json, đó chính xác là thứ tôi đang tìm kiếm.
Grandizer

Hmm thú vị, có lỗi không? Ý tưởng đằng sau việc sử dụng npm-upgradelà bạn có thể thấy chính xác những gì đang được nâng cấp và chọn và chọn những gì được nâng cấp. npm upgradecó thể hoạt động tốt với hầu hết mọi người nhưng đôi khi bạn cần kiểm soát nhiều hơn một chút khi nâng cấp.
manncito

1
Bạn cũng có thể sử dụng điều này với npx: npx npm-upgrade- khá tuyệt! :)
X-quang

22

Dưới đây là một biểu thức cơ bản để khớp với số phiên bản ngữ nghĩa để bạn có thể nhanh chóng thay thế tất cả bằng dấu hoa thị.

Phiên bản ngữ nghĩa Regex

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

Cách sử dụng

Chọn các phiên bản gói bạn muốn thay thế trong tệp JSON.

ảnh chụp màn hình: chọn văn bản bạn muốn thay thế

Nhập biểu thức chính quy ở trên và xác minh nó phù hợp với văn bản chính xác.

ảnh chụp màn hình: nhập biểu thức chính giữa

Thay thế tất cả các trận đấu bằng dấu hoa thị.

ảnh chụp màn hình: thay thế các phiên bản gói bằng dấu hoa thị

Chạy npm update --save


không có khi có số trong tên gói. tức là: babel-preset-es2015, babel-preset-giai đoạn-0, hex2rgba. Có thể tìm kiếm trích dẫn / trích dẫn kép tại cầu xin:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
rofrol

1
trên bất kỳ trình chỉnh sửa nào hỗ trợ nhiều dấu mũ (ej Sublime Text), bạn có thể chọn lần đầu tiên :và nhấn ctrl+dnhiều lần cho đến khi bạn chọn tất cả, sau đó chuyển đến số phiên bản (nhấn mũi tên phải 2 lần) và nhấn phím ctrl, sau đó viết"*"
Ivan Castellanos

15

Gần đây tôi đã phải cập nhật một số dự án đang sử dụng npm và pack.json cho phép thuật gruntfile.js của họ. Lệnh bash sau đây (lệnh multiline) hoạt động tốt với tôi:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

Ý tưởng ở đây: Để dẫn npm outdatedđầu ra là json, đến jq
(jq là một công cụ truy vấn / phân tích cú pháp dòng lệnh json)
(chú ý sử dụng --depthđối số cho npm outdated)
jq sẽ loại bỏ đầu ra chỉ thành tên gói cấp cao nhất.
cuối cùng xargs đặt từng LIBRARYNAME vào một npm install LIBRARYNAME --save-devlệnh

Trên đây là những gì làm việc cho tôi trên một máy chạy: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

yêu cầu này:
xargs http://en.wikipedia.org/wiki/Xargs (tôi tin vào máy của tôi)

jq http://stedolan.github.io/jq/ (Tôi đã cài đặt nó với brew install jq)

Lưu ý: Tôi chỉ lưu các thư viện đã cập nhật vào pack.json bên trong khóa json devDependanciesbằng cách sử dụng--save-dev , đó là một yêu cầu của các dự án của tôi, hoàn toàn có thể không phải của bạn.

Sau đó tôi kiểm tra xem mọi thứ có đơn giản không

npm outdated --depth=0

Ngoài ra, bạn có thể kiểm tra các phiên bản thư viện đã cài đặt toplevel hiện tại với

npm list --depth=0

Tôi yêu jq và sử dụng nó gần như mỗi ngày, nhưng với mục đích này, tôi sử dụng đơn giản awkthay vào đó:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani

1
Tôi đã sử dụngcat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte

15

Nếu bạn muốn sử dụng một cách tiếp cận nhẹ nhàng thông qua giao diện báo cáo tương tác (cho thiết bị đầu cuối) đẹp, tôi khuyên bạn nên sử dụng npm-check .

Nó ít hơn một cái búa và cung cấp cho bạn kiến ​​thức hệ quả hơn và kiểm soát các cập nhật phụ thuộc của bạn.

Để cung cấp cho bạn hương vị của những gì đang chờ ở đây, một ảnh chụp màn hình (được quét từ trang git để kiểm tra npm):

nhập mô tả hình ảnh ở đây


14

Tính năng này đã được giới thiệu trong npm v5. cập nhật lên npm bằng npm install -g npm@latest

cập nhật package.json

  1. xóa /node_modulespackage-lock.json (if you have any)

  2. chạy npm update. điều này sẽ cập nhật gói phụ thuộc.j.j lên bản mới nhất, dựa trên semver .

để cập nhật lên phiên bản mới nhất. bạn có thể đi vớinpm-check-updates


13

Nếu bạn sử dụng sợi, lệnh sau sẽ cập nhật tất cả các gói lên phiên bản mới nhất của chúng:

yarn upgrade --latest

Từ tài liệu của họ :

Các upgrade --latestnâng cấp lệnh gói giống như các lệnh nâng cấp, nhưng bỏ qua phạm vi quy định tại phiên bản package.json. Thay vào đó, phiên bản được chỉ định bởi thẻ mới nhất sẽ được sử dụng (có khả năng nâng cấp các gói trên các phiên bản chính).


1
Không cập nhật các phụ thuộc trong package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

13

Kể từ phiên bản npm 5.2.0, có một cách để chạy nó trong một dòng duy nhất mà không cần cài đặt bất kỳ gói bổ sung nào vào sổ đăng ký npm toàn cầu cũng như cục bộ cho ứng dụng của bạn. Điều này có thể được thực hiện bằng cách tận dụng npxtiện ích mới đi kèm với npm. ( Bấm vào đây để tìm hiểu thêm. )

Chạy lệnh sau trong thư mục gốc của dự án của bạn:

npx npm-check-updates -u && npm i

Tôi mới thử cái này và nó hoạt động ... ngoại trừ tôi phải chạy npm installđể thực sự tải xuống các phụ thuộc mới. Vì vậy, tôi đoán điều này chỉ cập nhật
gói.json

@THERga, bạn hoàn toàn đúng, cảm ơn! Tôi đã sửa đổi câu trả lời của mình để chạy npm installsau khi các phụ thuộc đã được cập nhật.
ilyakam

13

Tôi sử dụng npm-checkđể đạt được điều này.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

nhập mô tả hình ảnh ở đây

Một danh sách lệnh hữu ích khác sẽ giữ số phiên bản chính xác trong package.json

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i

ncu -uvà không phải ncu -uatrong dòng cuối cùng thứ hai. Tôi không thể chỉnh sửa vì không được phép thay đổi một ký tự. Rất hữu ích bằng cách này.
Sohail Ahmed

10

Cập nhật!

Dựa trên npm đã lỗi thời, updtr cài đặt phiên bản mới nhất và chạy thử nghiệm npm cho từng phụ thuộc. Nếu thử nghiệm thành công, updtr lưu số phiên bản mới vào gói.json của bạn. Tuy nhiên, nếu thử nghiệm thất bại, updtr sẽ khôi phục các thay đổi của nó.

https://github.com/peerigon/updtr


9

Các lệnh mà tôi đã phải sử dụng để cập nhật package.jsoncho NPM 3.10.10:

npm install -g npm-check-updates
ncu -a
npm install

Lý lịch:

Tôi đã sử dụng lệnh mới nhất từ ​​@ josh3736 nhưng tôi package.jsonkhông được cập nhật. Sau đó tôi nhận thấy văn bản mô tả khi chạy npm-check-updates -u:

Sự phụ thuộc sau được thỏa mãn bởi phạm vi phiên bản khai báo của nó, nhưng phiên bản đã cài đặt nằm phía sau. Bạn có thể cài đặt phiên bản mới nhất mà không cần sửa đổi tệp gói của mình bằng cách sử dụng cập nhật npm. Nếu bạn muốn cập nhật sự phụ thuộc trong tệp gói của mình, hãy chạy ncu -a.

Đọc tài liệu về npm-check-update bạn có thể thấy sự khác biệt:

https://www.npmjs.com/package/npm-check-updates

-u, --upTHER: ghi đè tập tin gói

-a, --upTHERAll: bao gồm cả những phụ thuộc có phiên bản mới nhất đáp ứng phụ thuộc semver được khai báo

ncu là một bí danh npm-check-updatesnhư đã thấy trong tin nhắn khi gõ npm-check-updates -u:

[INFO]: You can also use ncu as an alias

Trong npm-check-Updates v3, -alà hành vi mặc định và việc ghi đè gói.json chỉ còn lại -utùy chọn.
Raine Revere

8

Nếu bạn đang sử dụng yarn,yarn upgrade-interactive là một công cụ thực sự đẹp mắt có thể cho phép bạn xem các phụ thuộc đã lỗi thời của mình và sau đó chọn những công cụ bạn muốn cập nhật.

Nhiều lý do để sử dụng Sợi hơn npm. Heh.


Sợi đang di chuyển nhanh, đạt 1.0 và là một niềm vui chết tiệt để sử dụng. Đây phải là câu trả lời mới được chọn.
Josh Habdas

1
Không cập nhật các phụ thuộc trong package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

5

Các lệnh trên không an toàn vì bạn có thể phá vỡ mô-đun của mình khi chuyển đổi phiên bản. Thay vào đó tôi khuyên bạn nên như sau

  • Đặt phiên bản mô-đun nút hiện tại thực tế thành pack.json bằng cách sử dụng npm shrinkwrap lệnh.
  • Cập nhật từng phụ thuộc lên phiên bản mới nhất NẾU KHÔNG NÓI KIỂM TRA CỦA BẠN bằng cách sử dụng https://github.com/bahmutov/next-update công cụ dòng lệnh
cài đặt npm -g cập nhật tiếp theo
// từ gói của bạn
cập nhật tiếp theo

1
Những thay đổi không tương thích ngược cần phải được bảo vệ chống lại các dự án đang hoạt động. OP quan tâm nhiều hơn đến việc bắt đầu một dự án mới, nơi bạn muốn phá vỡ mọi thứ ngay bây giờ thay vì sau này và có các phiên bản mới nhất để làm việc.
Raine Revere

3

Hãy thử làm theo lệnh nếu bạn sử dụng npm 5 và nút 8

cập nhật npm - lưu


2
Các updatelệnh dường như không để bump phụ thuộc bên ngoài định nghĩa ban đầu. Nếu package.jsontuyên bố "1.2.3"chính xác bạn sẽ không nhận được 1.2.4. Điều đó có thể tốt hoặc xấu :)
Álvaro González

3

Đoạn mã sau (đã được chấp nhận) đã viết cho tôi một cái gì đó như "nó mất quá lâu blah-blah" và không làm gì cả. Có lẽ sử dụng cờ toàn cầu là vấn đề, idk.

npm i -g npm-check-updates
ncu -u
npm install

Tôi quyết định sử dụng trình soạn thảo văn bản của mình và thay vào đó là một cách tiếp cận bán thủ công.

Tôi đã sao chép một danh sách như thế này (chỉ dài hơn rất nhiều) từ các phụ thuộc dev của tôi package.jsonsang trình soạn thảo văn bản notepad ++:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

Tôi đặt chế độ tìm kiếm thành biểu thức chính quy, sử dụng ^\s*"([^"]+)".*$mẫu để lấy tên gói và thay thế bằng npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Nhấp vào "thay thế tất cả". Các otput là thế này:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

Tôi đã sao chép nó trở lại bash và nhấn enter. Mọi thứ đã được nâng cấp và hoạt động tốt. Đó là tất cả.

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

Tôi không nghĩ đó là một vấn đề lớn, vì bạn chỉ phải làm điều đó mọi lúc, nhưng bạn có thể dễ dàng viết một tập lệnh, phân tích cú pháp package.jsonvà nâng cấp các gói của bạn. Tôi nghĩ rằng nó tốt hơn theo cách này, bởi vì bạn có thể chỉnh sửa danh sách của mình nếu bạn cần một cái gì đó đặc biệt, ví dụ như giữ phiên bản hiện tại của một lib.


1
Với npm-check-update, thiết bị đầu cuối treo là một vấn đề đã biết trên Windows. Hãy thử thêm --packageFile package.jsonđể biết không chờ đợi stdin.
Raine Revere

@RaineRevere Cảm ơn!
inf3rno

3

Tôi đã giải quyết điều này bằng cách xem hướng dẫn từ https://github.com/tjunnone/npm-check-updates

$ npm install -g npm-check-updates
$ ncu
$ ncu -u # to update all the dependencies to latest
$ ncu -u "specific module name"  #in case you want to update specific dependencies to latest

3

Tôi tìm thấy một giải pháp khác cho phiên bản NPM gần đây. Những gì tôi muốn làm là thay thế tất cả các phụ thuộc "*" bằng số phiên bản mới nhất rõ ràng. Không có phương pháp nào được thảo luận đã làm việc cho tôi.

Tôi đã làm gì:

  1. Thay thế tất cả "*" bằng "^ 0,0.0"
  2. Chạy npm-check-updates -u

Mọi thứ trong pack.json hiện được cập nhật lên phiên bản cuối cùng.


3

Nếu bạn không muốn cài đặt cập nhật npm-check-update toàn cầu , bạn chỉ cần chạy nó:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"

2

Thay thế là

"dependencies":{
    "foo" : ">=1.4.5"
}

Mỗi khi bạn sử dụng cập nhật npm, nó sẽ tự động cập nhật lên phiên bản mới nhất. Để biết thêm cú pháp phiên bản, bạn có thể kiểm tra tại đây: https://www.npmjs.org/doc/misc/semver.html


Một lý do cho phiên bản là để ngăn những thay đổi không tương thích ngược từ các phiên bản chính mới hơn. Tôi muốn giới thiệu với số phiên bản này hoặc '*'. OP có liên quan đến việc giảm bớt quá trình trong khi duy trì quyền kiểm soát khi nó xảy ra.
Raine Revere

2

Giải pháp không có gói bổ sung

Thay đổi phiên bản của mọi phụ thuộc thành *:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

Sau đó chạy npm update --save .

Một số gói của bạn đã được cập nhật, nhưng một số thì không?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

Đây là phần khó khăn, nó có nghĩa là phiên bản "phản ứng" cục bộ của bạn thấp hơn phiên bản mới nhất. Trong trường hợp này, npm đã tải xuống và cập nhật gói "phản ứng". Tuy nhiên, phiên bản "Reac-google-maps" cục bộ của bạn giống với phiên bản mới nhất.

Nếu bạn vẫn muốn "cập nhật" không thay đổi *, bạn phải xóa các mô-đun này khỏi node_modulesthư mục.

ví dụ xóa node_modules/react-google-maps.

Cuối cùng chạy lại npm update --save.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

Đừng quên chạy npm update --save-devnếu bạn muốn cập nhật các phụ thuộc phát triển.


1

Greenkeeper nếu bạn đang sử dụng Github. https://greenkeeper.io/

Đó là một sự tích hợp Github và cực kỳ dễ dàng để thiết lập mọi thứ. Khi được cài đặt, nó sẽ tự động tạo các yêu cầu kéo trong kho bạn chỉ định (hoặc tất cả nếu muốn) và giữ cho mã của bạn luôn cập nhật, mà không buộc bạn phải làm bất cứ điều gì thủ công. Sau đó, PR sẽ kích hoạt bản dựng trên dịch vụ CI và tùy thuộc vào kiểm tra thành công hay thất bại, bạn có thể tiếp tục tìm hiểu điều gì gây ra vấn đề hoặc khi CI vượt qua chỉ đơn giản là hợp nhất PR.

người quản lý PR 1 người quản lý PR 2

Ở phía dưới, bạn có thể thấy rằng bản dựng đầu tiên thất bại lúc đầu và sau khi một cam kết ("nâng cấp lên nút v6.9") các bài kiểm tra vượt qua để cuối cùng tôi có thể hợp nhất PR. Đi kèm với rất nhiều biểu tượng cảm xúc, quá.

Một lựa chọn khác sẽ là https://dependencyci.com/ , tuy nhiên tôi đã không kiểm tra nó kỹ lưỡng. Sau cái nhìn đầu tiên, Greenkeeper có vẻ tốt hơn trong IMO nói chung và có sự tích hợp tốt hơn.


1
  • npm lỗi thời
  • cập nhật npm

Sẽ giúp bạn có các phiên bản mong muốn mới nhất tương thích cho ứng dụng của bạn. Nhưng không phải là phiên bản mới nhất.

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.