私は他のプロジェクトから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 を維持しています。楽しい!
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
を実行してください。新しいバージョンが利用可能なインストール済みの依存関係が一覧表示されます。
npm-check-updates
は自動的にpackage.jsonをすべての依存関係の最新バージョンに合わせるユーティリティです
を参照してください。https://www.npmjs.org/package/npm-check-updates
$ npm install -g npm-check-updates
$ ncu -u
$ npm install
これらの答えが最初に書かれてから事態は少し変わりました。
npm outdated
+ npm update
+ npm shrinkwrap
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 -rf node_modules
$ npm install
npm-shrinkwrap.json
でnpm shrinkwrap
に保存します$ rm npm-shrinkwrap.json
$ npm shrinkwrap
npm install
はnpm-shrinkwrap.json
の正確なバージョンを使うようになりますnpm-shrinkwrap.json
をgitにチェックインすると、すべてのインストールでまったく同じバージョンが使用されます。
これは開発から(すべての更新、常に)生産へ(誰も何も触らないで)移行する方法です。
手動で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
を編集しなければならないのも嫌いです;)
これはnpm 1.3.15以降で動作します。
"dependencies": {
"foo": "latest"
}
*
を使用してくださいlatest
を使う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"
},
私が上記の最良の答えで見つけた唯一の警告はそれが最新バージョンにモジュールをアップデートするということです。これは、不安定なアルファビルドに更新される可能性があることを意味します。
私はそのnpm-check-updatesユーティリティを使うでしょう。
Etienneが上で述べたように、これをインストールして実行します。
$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install
どのパッケージに新しいバージョンがあるかを確認するには、次のコマンドを使用します。
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
私は npm-upgrade がどのように動くかがとても好きです。それはあなたの依存関係の全てを通り抜けて、あなたが最新のバージョンと比較された現在のバージョンを見て、望むなら更新することを可能にする簡単なコマンドラインユーティリティです。
これは、プロジェクトのルート(npm-upgrade
ファイルの横)でpackage.json
を実行した後に何が起こるかのスクリーンショットです。
依存関係ごとに、アップグレード、無視、変更履歴の表示、またはプロセスの終了を選択できます。これは私にとってこれまでのところうまくいっています。
編集:明確にするために、これはコマンドが動作する前にインストールする必要があるサードパーティのパッケージです。 npm自体は付属していません。
npm install -g npm-upgrade
それから、package.jsonファイルを持つプロジェクトのルートから:
npm-upgrade
この機能はnpm v5
で導入されました。 npm install -g npm@latest
を使用してnpmに更新し、
package.json
を更新する
/node_modules
とpackage-lock.json (if you have any)
を削除
npm update
を実行してください。これにより、 semver に基づいて、依存関係package.jsonが最新のものに更新されます。
最新バージョンにアップデートする。あなたはnpm-check-updates
で行くことができます
私は最近彼らの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
あなたが美しい(端末用の)対話型の報告インターフェースを介して穏やかなアプローチを使いたいのなら、 npm-check を使うことをお勧めします。
それはあまりハンマーではなく、あなたがあなたの依存関係の更新についてもっと必然的な知識を持ち、それを制御することを可能にします。
ここに何が待っているのかを知るために、スクリーンショット(npm-checkのgitページから削り取ったもの)があります。
Updtr!
古いnpmに基づいて、updtrは最新バージョンをインストールし、各依存関係に対してnpm testを実行します。テストが成功すると、updtrは新しいバージョン番号をあなたのpackage.jsonに保存します。テストが失敗すると、updtrはその変更をロールバックします。
package.json
をNPM 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
npm-check-updates
https://www.npmjs.com/package/npm-check-updates
npm-check-updatesでは、既存のバージョンの制約に関わらず、package.json 依存関係を最新バージョンにアップグレードすることができます。
$ npm install -g npm-check-updates
$ ncu -u
依存関係が更新されました!これですべてです。
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
簡単な一歩:
$ npm install -g npm-check-updates && ncu -a && npm i
yarn
を使用している場合は、 yarn upgrade-interactive
を使用すると、古くなった依存関係を表示して、更新したい依存関係を選択できます。
npm
よりもYarnを使用するその他の理由。ほら.
上記のコマンドはバージョンを切り替えるときにモジュールを壊す可能性があるので安全ではありません。
npm shrinkwrap
コマンドを使用して、実際の現在のノードモジュールのバージョンをpackage.jsonに設定します。npm install -g next-update //あなたのパッケージから next-update
Npm 5とnode 8を使用している場合は、次のコマンドを試してください。
npm更新 - 保存
Yarnを使用する場合、次のコマンドはすべてのパッケージを最新のバージョンに更新します。
yarn upgrade --latest
docs :から
upgrade --latest
コマンドは、upgradeコマンドと同じ方法でパッケージをアップグレードしますが、package.jsonで指定されたバージョン範囲は無視されます。代わりに、最新のタグで指定されたバージョンが使用されます(メジャーバージョン間でパッケージをアップグレードする可能性があります)。
Npmバージョン5.2.0以降では、追加のパッケージをグローバルnpmレジストリにもローカルにもアプリケーションにもインストールせずに1行で実行する方法があります。これは、npmにバンドルされている新しいnpx
ユーティリティを利用することで実現できます。 ( 詳細についてはここをクリックしてください。 )
プロジェクトのルートで次のコマンドを実行します。
npx npm-check-updates -u && npm i
代替案は
"dependencies":{
"foo" : ">=1.4.5"
}
npm updateを使用するたびに、自動的に最新バージョンに更新されます。より多くのバージョンの構文については、ここでチェックすることができます: https://www.npmjs.org/doc/misc/semver.html
次のコード(これは受け入れられました)では、「時間がかかりすぎる」と書いたが、何もしなかった。おそらくグローバルフラグの使用が問題でした、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を維持するなど、リストを編集できるので、この方法のほうが良いと思います。
追加パッケージなしの解決策
すべての依存関係のバージョンを*
に変更します。
"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
を実行することを忘れないでください。
あなたのアプリケーションと互換性のある最新の必要なバージョンを入手する必要があります。しかし最新バージョンではありません。
これがpackage.json
のすべての依存関係を最新のものに更新するために私がしたことです。
npm install -g npm-check-updates
ncu -u --packageFile package.json
グローバル 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()))"
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
Githubを使用している場合はGreenkeeper。 https://greenkeeper.io/ /
これはGithubの統合であり、設定が非常に簡単です。インストールすると、手動で何もしなくても、指定したリポジトリ(または必要に応じてすべて)にプル要求が自動的に作成され、常に最新の状態に保たれます。 PRはCIサービスの構築をトリガーする必要があります。チェックの成功または失敗に応じて、問題の原因となっているものを特定したり、CIが合格したときにPRをマージしたりできます。
一番下には、最初のビルドが最初に失敗し、コミット後( "upgrade to node v6.9")にテストがパスしたので、最後にPRをマージできたことがわかります。絵文字もたくさん付いています。
もう一つの選択肢は https://dependencyci.com/ ですが、私は徹底的にテストしませんでした。一見したところ、Greenkeeperは一般的なIMOで見栄えがよくなり、統合性が向上しました。
私はNPMの最近のバージョン用の別の解決策を見つけました。私がやりたいことは、すべての "*"依存関係を明示的な最新バージョン番号に置き換えることです。説明された方法のどれも私のために働きませんでした。
私がしたこと:
npm-check-updates -u
を実行Package.jsonのすべてが最新のバージョンに更新されました。
今日の時点でこれを行う最も簡単な方法は、npmではなくpnpmを使用し、単に次のように入力することです。
pnpm update --latest
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