web-dev-qa-db-ja.com

Package.jsonの各依存関係を最新のバージョンに更新するにはどうすればいいですか?

私は他のプロジェクトからpackage.jsonをコピーしましたが、これは新鮮なプロジェクトなので依存関係のすべてを最新のバージョンにまとめたいと思います。

これを行う最も簡単な方法は何ですか?

私が今知っている最善の方法はnpm info express versionを実行してからそれぞれのpackage.jsonを手動で更新することです。もっと良い方法があるはずです。

{
  "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"
  }
}

UPDATE 5/1/19 :6年経っても、この問題に対する包括的な解決策として npm-check-updates を維持しています。楽しい!

1733
Raine Revere

npm-check-updates のように見えるようになりました。

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

Npm <3.11の場合:

すべての依存関係のバージョンを*に変更してからnpm update --saveを実行するだけです。 ( 注: 最近の(3.11)バージョンのnpm では壊れています。).

前:

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

後:

  "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"
  }

もちろん、これは依存関係を更新する鈍いハンマーです。あなたが言ったように、プロジェクトが空で何も壊れることができないのであれば、それは問題ありません。

一方、より成熟したプロジェクトで作業している場合は、アップグレードする前に依存関係に重大な変更がないことを確認することをお勧めします。

どのモジュールが古くなっているかを見るには、 npm outdated を実行してください。新しいバージョンが利用可能なインストール済みの依存関係が一覧表示されます。

1969
josh3736

npm-check-updatesは自動的にpackage.jsonをすべての依存関係の最新バージョンに合わせるユーティリティです

を参照してください。https://www.npmjs.org/package/npm-check-updates

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

TLDR; (新しいNPMバージョン用に更新された)

これらの答えが最初に書かれてから事態は少し変わりました。

npm 2+:npm outdated + npm update + npm shrinkwrap

古いnpm:npm-check-updatesパッケージ+ npm shrinkwrap

必ず学士号を縮めないでください。そうしないと、プロジェクトが死んでしまう可能性があります。私は先日プロジェクトを引っ張り出しました、そして、私の学部長がすべて時代遅れ/更新された/混乱のためにそれは実行されませんでした。私がシュリンクラップした場合、npmは私が必要としていたものを正確にインストールしたでしょう。


詳細

これまでのところ好奇心旺盛な人には、これが私のお勧めです。

最新バージョンを提示するにはnpm-check-updatesまたはnpm outdatedを使用してください。

# `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

その後、クリーンインストールを実行します(rmを使わずに、依存関係の警告が表示されます)。

$ rm -rf node_modules
$ npm install 

最後に、正確なバージョンをnpm-shrinkwrap.jsonnpm shrinkwrapに保存します

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

これで、npm installnpm-shrinkwrap.jsonの正確なバージョンを使うようになります

npm-shrinkwrap.jsonをgitにチェックインすると、すべてのインストールでまったく同じバージョンが使用されます。 

これは開発から(すべての更新、常に)生産へ(誰も何も触らないで)移行する方法です。

331
Michael Cole

手動でpackage.jsonを開いて変更せずに one 依存関係を最新のバージョンに更新するには、次のコマンドを実行します。

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

すなわち.

npm install express@* --save

参考のために、 npm-install


拒否された編集に関してユーザVespakoenが指摘したように、このようにして一度に複数のパッケージを更新することも可能です:

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

彼はまた、npm outdatedに基づいてシェル用のワンライナーを割り当てています。コードと説明については 編集 を参照してください。


シモンズ:私はそのようなことのために手動でpackage.jsonを編集しなければならないのも嫌いです;)

171
laconbass

IDEとして Visual Studio Code を使用している場合、これはpackage.jsonの更新をワンクリックプロセスにするための楽しい小さな拡張機能です。

Version Lense

enter image description here

70
GollyJer

これはnpm 1.3.15以降で動作します。

"dependencies": {
  "foo": "latest"
}
55
Tobiasz Cudnik
  1. Unstableを含む最新のリリースのバージョンとして*を使用してください
  2. 最新の安定版のバージョン定義としてlatestを使う
  3. LatestStablePackages を使用して正確に最新の安定版番号でpackage.jsonを修正

これが一例です。

"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"
},
44
Mr. Sun Lin

私が上記の最良の答えで見つけた唯一の警告はそれが最新バージョンにモジュールをアップデートするということです。これは、不安定なアルファビルドに更新される可能性があることを意味します。

私はそのnpm-check-updatesユーティリティを使うでしょう。

Etienneが上で述べたように、これをインストールして実行します。

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
37
Tyler Davis

どのパッケージに新しいバージョンがあるかを確認するには、次のコマンドを使用します。

npm outdated

one 依存関係だけを更新するには、次のコマンドを使用します。

npm install yourPackage@latest --save

例えば:

私のpackage.jsonファイルには依存関係があります。 

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

それから私は書くべきです:

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

私は npm-upgrade がどのように動くかがとても好きです。それはあなたの依存関係の全てを通り抜けて、あなたが最新のバージョンと比較された現在のバージョンを見て、望むなら更新することを可能にする簡単なコマンドラインユーティリティです。 

これは、プロジェクトのルート(npm-upgradeファイルの横)でpackage.jsonを実行した後に何が起こるかのスクリーンショットです。

npm upgrade example

依存関係ごとに、アップグレード、無視、変更履歴の表示、またはプロセスの終了を選択できます。これは私にとってこれまでのところうまくいっています。

編集:明確にするために、これはコマンドが動作する前にインストールする必要があるサードパーティのパッケージです。 npm自体は付属していません。

npm install -g npm-upgrade

それから、package.jsonファイルを持つプロジェクトのルートから:

npm-upgrade
31
manncito

これは意味的なバージョン番号を一致させるための基本的な正規表現です。

セマンティックバージョンの正規表現

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

使い方

JSONファイルで置き換えたいパッケージのバージョンを選択します。

screenshot:select the text you want to replace

上記の正規表現を入力して、正しいテキストと一致することを確認してください。

screenshot:input the semver regex above

すべての一致をアスタリスクで置き換えます。

screenshot:replace package versions with an asterisk

npm update --saveを実行する

21
daniellmb

この機能はnpm v5で導入されました。 npm install -g npm@latestを使用してnpmに更新し、 

package.jsonを更新する 

  1. /node_modulespackage-lock.json (if you have any)を削除 

  2. npm updateを実行してください。これにより、 semver に基づいて、依存関係package.jsonが最新のものに更新されます。 

最新バージョンにアップデートする。あなたはnpm-check-updatesで行くことができます

14
Sibiraj

私は最近彼らのgruntfile.jsの魔法のためにnpmとpackage.jsonを使っていたいくつかのプロジェクトを更新しなければなりませんでした。次のbashコマンド(複数行コマンド)は私にはうまくいきました。

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

ここでの考えは: npm outdatedの出力をjsonとしてパイプ処理し、jqにする
(jqはjsonのコマンドラインパーサ/クエリツールです)
--depthに対するnpm outdated引数の使用に注意してください)
jqは、トップレベルのパッケージ名だけに出力を削除します。
最後にxargsは各LIBRARYNAMEを一度に1つずつnpm install LIBRARYNAME --save-devコマンドに入れます。

上記は私のために走っているマシンでうまくいったものです: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

これが必要:
xargs http://en.wikipedia.org/wiki/Xargs (私のコンピューターでネイティブなのだと思います)
そして
jq http://stedolan.github.io/jq/ (私はbrew install jqを使ってインストールしました)

注:--save-devを使用して、更新されたライブラリをjsonキーdevDependancies内のpackage.jsonに保存するだけです。これは私のプロジェクトの要件であり、あなたのものではない可能性があります。

その後、私はすべてがシンプルでグレービーであることを確認します

npm outdated --depth=0

また、現在インストールされている最上位のライブラリのバージョンを確認することもできます。

npm list --depth=0
13
andxyz

あなたが美しい(端末用の)対話型の報告インターフェースを介して穏やかなアプローチを使いたいのなら、 npm-check を使うことをお勧めします。 

それはあまりハンマーではなく、あなたがあなたの依存関係の更新についてもっと必然的な知識を持ち、それを制御することを可能にします。

ここに何が待っているのかを知るために、スクリーンショット(npm-checkのgitページから削り取ったもの)があります。

enter image description here

12
TWright

Updtr!

古いnpmに基づいて、updtrは最新バージョンをインストールし、各依存関係に対してnpm testを実行します。テストが成功すると、updtrは新しいバージョン番号をあなたのpackage.jsonに保存します。テストが失敗すると、updtrはその変更をロールバックします。

https://github.com/peerigon/updtr

10
David Braun

これをアーカイブするにはnpm-checkを使います。

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

enter image description here

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
8
goksel

package.jsonNPM 3.10.10に更新するために使用しなければならなかったコマンド:

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

バックグラウンド:

@ josh3736の最新のコマンドを使用していましたが、package.jsonは更新されませんでした。私はそれからnpm-check-updates -uを実行するときに説明のテキストに気づきました:

次の依存関係は宣言されたバージョン範囲によって満たされますが、インストールされているバージョンは遅れています。 npm updateを使用すると、パッケージファイルを変更せずに最新のバージョンをインストールできます。それでもパッケージファイルの依存関係を更新したい場合は、ncu -aを実行してください。

Npm-check-updatesのドキュメントを読むと、違いがわかります。

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

-u、 - upgrade:パッケージファイルを上書きする

-a、 - upgradeAll:最新バージョンが宣言されたsemver依存関係を満たす依存関係でさえも含める

npm-check-updatesと入力したときのメッセージに表示されているように、ncuはnpm-check-updates -uの別名です。

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

npm-check-updates

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

npm-check-updatesでは、既存のバージョンの制約に関わらず、package.json 依存関係を最新バージョンにアップグレードすることができます。

$ npm install -g npm-check-updates

$ ncu -u

依存関係が更新されました!これですべてです。

8
аlex dykyі

Ncuはアップデートをチェックするための新しいエイリアスです。そうすることで、package.jsonでurのバージョン番号を手動で更新する必要がなくなります。 Linuxマシンを使用している場合は、以下の方法に従ってください。 

Sudo npm i -g npm-check-updates
// decide between -u or -a
ncu -u, --upgrade and overwrite package file
ncu -a, --upgradeAll include even those dependencies whose latest 
          version satisfies the declared server dependency
Sudo npm install
7
karthik006

簡単な一歩:

$ npm install -g npm-check-updates && ncu -a && npm i
6
Matt

yarnを使用している場合は、 yarn upgrade-interactive を使用すると、古くなった依存関係を表示して、更新したい依存関係を選択できます。

npmよりもYarnを使用するその他の理由。ほら.

5
Yangshun Tay

上記のコマンドはバージョンを切り替えるときにモジュールを壊す可能性があるので安全ではありません。

  • npm shrinkwrapコマンドを使用して、実際の現在のノードモジュールのバージョンをpackage.jsonに設定します。
  • https://github.com/bahmutov/next-update コマンドラインツールを使用して、各依存関係を最新バージョンに更新します
 npm install -g next-update 
 //あなたのパッケージから
 next-update 
5
gleb bahmutov

Npm 5とnode 8を使用している場合は、次のコマンドを試してください。

npm更新 - 保存

4
krunal shah

Yarnを使用する場合、次のコマンドはすべてのパッケージを最新のバージョンに更新します。

yarn upgrade --latest

docs :から

upgrade --latestコマンドは、upgradeコマンドと同じ方法でパッケージをアップグレードしますが、package.jsonで指定されたバージョン範囲は無視されます。代わりに、最新のタグで指定されたバージョンが使用されます(メジャーバージョン間でパッケージをアップグレードする可能性があります)。

4
fotijr

Npmバージョン5.2.0以降では、追加のパッケージをグローバルnpmレジストリにもローカルにもアプリケーションにもインストールせずに1行で実行する方法があります。これは、npmにバンドルされている新しいnpxユーティリティを利用することで実現できます。 ( 詳細についてはここをクリックしてください。

プロジェクトのルートで次のコマンドを実行します。

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

代替案は

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

npm updateを使用するたびに、自動的に最新バージョンに更新されます。より多くのバージョンの構文については、ここでチェックすることができます: https://www.npmjs.org/doc/misc/semver.html

3
Haven

次のコード(これは受け入れられました)では、「時間がかかりすぎる」と書いたが、何もしなかった。おそらくグローバルフラグの使用が問題でした、idk。

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

私は自分のテキストエディタを使用し、代わりに半手動のアプローチに従うことにしました。

私はpackage.jsonのdevの依存関係からメモ帳++のテキストエディタにこのような(もう少し長い)リストをコピーしました:

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

検索モードを正規表現に設定し、^\s*"([^"]+)".*$パターンを使用してパッケージ名を取得し、それをnpm uninstall \1 --save-dev \nnpm install \1 --save-devに置き換えました。 「全置換」をクリックしました。出力はこれでした:

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

私はそれをbashにコピーしてenterを押しました。すべてがアップグレードされ、正常に機能していました。それで全部です。

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

時々しなければならないので大したことではないと思いますが、package.jsonを解析してパッケージをアップグレードするスクリプトを簡単に書くことができます。何か特別なことが必要な場合は、現在のバージョンのlibを維持するなど、リストを編集できるので、この方法のほうが良いと思います。

2
inf3rno

追加パッケージなしの解決策

すべての依存関係のバージョンを*に変更します。

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

それからnpm update --saveを実行してください。

あなたのパッケージのいくつかは更新されましたが、いくつかはそうではありませんか?

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

これは難しい部分です、それはあなたの "react"のあなたのローカルバージョンが最新のものより低かったことを意味します。この場合、npmは "react"パッケージをダウンロードして更新しました。しかし、あなたの "react-google-maps"のあなたのローカル版は最新のものと同じです。

それでも*を変更せずに「更新」したい場合は、node_modulesフォルダからこれらのモジュールを削除する必要があります。

例えばnode_modules/react-google-mapsを削除します。

最後にもう一度npm update --saveを実行します。

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

開発依存関係を更新したい場合はnpm update --save-devを実行することを忘れないでください。

  • nPMが期限切れ 
  • npm更新

あなたのアプリケーションと互換性のある最新の必要なバージョンを入手する必要があります。しかし最新バージョンではありません。

2
webkitfanz

これがpackage.jsonのすべての依存関係を最新のものに更新するために私がしたことです。

npm install -g npm-check-updates
ncu -u --packageFile package.json 
2
Arpit

グローバル npm-check-updates をインストールしたくない場合は、単純に実行できます:

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()))"
1
Yukulélé

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
1
Sunil

Githubを使用している場合はGreenkeeper。 https://greenkeeper.io/ /

これはGithubの統合であり、設定が非常に簡単です。インストールすると、手動で何もしなくても、指定したリポジトリ(または必要に応じてすべて)にプル要求が自動的に作成され、常に最新の状態に保たれます。 PRはCIサービスの構築をトリガーする必要があります。チェックの成功または失敗に応じて、問題の原因となっているものを特定したり、CIが合格したときにPRをマージしたりできます。

greenkeeper PR 1 greenkeeper PR 2

一番下には、最初のビルドが最初に失敗し、コミット後( "upgrade to node v6.9")にテストがパスしたので、最後にPRをマージできたことがわかります。絵文字もたくさん付いています。

もう一つの選択肢は https://dependencyci.com/ ですが、私は徹底的にテストしませんでした。一見したところ、Greenkeeperは一般的なIMOで見栄えがよくなり、統合性が向上しました。

1
Luca Steeb

私はNPMの最近のバージョン用の別の解決策を見つけました。私がやりたいことは、すべての "*"依存関係を明示的な最新バージョン番号に置き換えることです。説明された方法のどれも私のために働きませんでした。

私がしたこと:

  1. すべての "*"を "^ 0.0.0"に置き換えます
  2. npm-check-updates -uを実行

Package.jsonのすべてが最新のバージョンに更新されました。

1
miqrc

今日の時点でこれを行う最も簡単な方法は、npmではなくpnpmを使用し、単に次のように入力することです。

pnpm update --latest

https://github.com/pnpm/pnpm/releases/tag/v3.2.0

0
Sumomo

NPMスクリプトで自動更新が可能です。

{
    "_cmd-update-modules": "npm run devops-update-modules",
    "scripts": {
        "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules",
        "npm-i-g": "npm i npm@latest -g",
        "npm-check-i-g": "npm i npm-check@latest -g",
        "eslint-i-g": "npm i eslint@latest -g",
        "npm-check-u-l": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -i lru-cache",
        "npm-check-u-g": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g -i lru-cache",
        "npm-deep-update-l": "npm update --depth 9999 --dev",
        "npm-deep-update-g": "npm update --depth 9999 --dev -g",
        "npm-cache-clear": "npm cache clear --force",
        "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-i-g && npm run npm-check-i-g && npm run eslint-i-g && npm run npm-check-u-l && npm run npm-check-u-g && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear"
    }
}

詳細およびステップバイステップのマニュアルについて: https://stackoverflow.com/a/34295664/462347

0
Mike B.