npm必要に応じてパッケージをチェックして更新する


471

KarmaテストランナーをTeamCityに統合する必要があります。そのために、sys-engineersに次のような小さなスクリプト(powershellなど)を提供します。

  1. いくつかの設定ファイルから目的のバージョン番号を取得します(私はそれをコメントとして直接に置くことができると思いますkarma.conf.js

  2. 定義されたバージョンのカルマランナーがnpmのグローバルリポジトリにインストールされているかどうかを確認します

  3. そうでない場合、またはインストールされているバージョンが必要以上に古い場合:正しいバージョンを選択してインストールします

  4. それを実行します: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

だから私の本当の質問は、「必要なバージョンのパッケージがインストールされている場合、どのようにしてスクリプトをチェックインできるか?」です。あなたはチェックをするべきですか、それともnpm -g install毎回電話するだけで安全ですか?

他の構成値が互換性を失う可能性があるため、常に最新の利用可能なバージョンをチェックしてインストールしたくない

回答:


609

プロジェクト内のモジュールが「古い」かどうかを確認するには:

npm outdated

' 時代遅れ 'は、package.jsonで定義されたすべてのモジュールをチェックし、NPMレジストリに新しいバージョンがあるかどうかを確認します。

例えば、言うxml2js 0.2.6(に位置しnode_modules、現在のプロジェクトで)新しいバージョンが(0.2.7)が存在するので、古くなっています。あなたは見るでしょう:

xml2js@0.2.7 node_modules/xml2js current=0.2.6

すべての依存関係を更新するには、自信がある場合はこれが望ましいです。

npm update

または、次のような単一の依存関係を更新しxml2jsます。

npm update xml2js

6
npm update特に注意してくださいnpm update -g...それは、ほとんどのpeaoleが期待することではありません!参照:github.com/npm/npm/issues/6247およびgist.github.com/othiym23/4ac31155da23962afd0e
jbandi 14

6
@jbandi npm@2.6.1以降、npm -g update再び使用しても安全です。github.com/npm/npm/issues/6247#issuecomment-92182814
チャックルバット

7
@Erik Olsonからの回答で述べられているように、npm updateはpackage.jsonファイルを更新しないことに注意してください。
Ehtesham Hasan 2017

5
As of npm@5.0.0, 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html
シドニー、

368

npm outdated更新する必要があるパッケージを識別し、npm update <package name>各パッケージの更新に使用できます。しかし、npm @ 5.0.0より前npm update <package name>では、package.jsonのバージョンは更新されません。これは問題です。

最良のワークフローは次のとおりです。

  1. 古いパッケージを特定する
  2. package.jsonのバージョンを更新する
  3. 実行npm updateして各パッケージの最新バージョンをインストールする

npm-check-updatesこのワークフローを支援するためにチェックアウトしてください。

  • npm-check-updatesをインストールする
  • npm-check-updates古いパッケージをリストするために実行します(基本的にはを実行するのと同じですnpm outdated
  • 実行npm-check-updates -uして、package.json内のすべてのバージョンを更新します(これは魔法のソースです)
  • npm update通常どおり実行して、更新されたpackage.jsonに基づいてパッケージの新しいバージョンをインストールします

3
npm outdatedこれだけ使う..でも、内部の他のパッケージをすべてのパッケージが表示されます..しかし、彼らは常に表示されますので、それらは、この手順で更新を取得しませんnpm-check-updates(あなたが実際に推奨されているように)のみからの主なパッケージを示しているpackage.json...これは関連性があります
davidhq 2015

糸を使用すると、「糸のアップグレード」と入力するだけではるかに簡単になります。
クリストファーグリッグ

17
パッケージマネージャーを管理するために更新マネージャーをインストールする必要があるのはなぜですか?これがばかげていることに同意しませんか?シンプルなはずですがnpm install --all-outdated、そうではありません...
ADJenks

3
npm update --save package_name最新の変更をpackage.jsonに保存するためにいつでも実行できます。
trungk18

エリックは、あなたが親切に返信することができ、この関連のSOの質問を、それはまだだから、である私には、両方のコマンドの違いを混乱ビット、npm updatenpm-check-updates
ジョアンピメンテルフェレイラ

146

呼ばれる「新鮮な」モジュールもありますnpm-check

npm-check

古く、正しくなく、未使用の依存関係を確認します。

ここに画像の説明を入力してください

また、依存関係を更新するための便利なインタラクティブな方法も提供します。


78

1つの簡単なステップ:

$ npm i -g npm-check-updates && ncu -u && npm i

以上です。のすべてのパッケージバージョンがpackage.json最新のメジャーバージョンになります。

編集:

ここで何が起きてるの?

  1. 更新をチェックするパッケージをインストールします。

  2. このパッケージを使用して、すべてのパッケージバージョンを更新しますpackage.json(-uは--updateAllの略です)。

  3. 新しいバージョンのパッケージをすべてインストールします。


3
@imnickvaughn ncuはnode-check-updatesの略で-a、「upgradeAll」オプションです。ここですべてのオプションを検索:npmjs.com/package/npm-check-updates
Arian Acosta

ncuのような別のパッケージを使用せずに1行で実行したい場合はどうなりますか?
ADJenks

またはグローバルインストールなしnpx -p npm-check-updates ncu -u
entozoon

68
  • 単一のローカルパッケージを更新するには:

    1. まず、古いパッケージを見つけます。

      npm outdated

    2. 次に、必要なパッケージを手動で更新します。

      npm update --save package_name

この方法では、ローカルpackage.json ファイルを更新する必要はありません。

これにより、パッケージが最新バージョンに更新されます。

  • package.jsonファイルにバージョンを書き込んで次のようにした場合:

    npm update package_name

    この場合、package.jsonファイルに書き込んだバージョンに関する次の安定バージョン(必要)のみが取得されます。

そして、npm list (package_name)あなたはあなたのローカルパッケージの現在のバージョンを見つけることができます。


14

一部の依存関係マニフェストファイルの脆弱性を更新または修正するNPMコマンド

  • 以下のコマンドを使用して、ノードモジュールの古い脆弱性または脆弱性を確認します。

    npm audit

  • 脆弱性が見つかった場合は、以下のコマンドを使用してすべての問題を修正します。

    npm audit fix

  • それがうまくいかない場合は、

    npm audit fix -f、このコマンドはほぼすべての脆弱性を修正します。一部の依存関係またはdevDependenciesはpackage-lock.jsonファイルでロックされているため、-fフラグを使用して強制的に更新します。

  • 強制監査修正を使用しない場合は、package-lock.jsonおよびpackage.jsonファイルで依存関係のバージョンを変更することにより、手動で修正できます。次に実行します

npm update && npm upgrade



10

追加のパッケージはありません。古いものをチェックして更新するだけで、このコマンドは次のようになります。

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)


いい男、ありがとう!
drKreso

シェルスクリプトに追加して、追加のパッケージをインストールする必要なくこの手順を自動化できるので、これは素晴らしい答えです。
Jankapunkt

4

npmパッケージをインストールする場合(グローバルまたはローカルの両方)@version、インストールするバージョンを定義する構文を使用して、特定のバージョンを定義できます。

言い換えると: npm install -g karma@0.9.2 を実行すると、0.9.2のみがインストールされ、すでに存在する場合は再インストールされません。

アドバイスとして、可能な限りグローバルnpmのインストールは避けることをお勧めします。多くの人は、依存関係がbinファイルを定義する場合、それが./node_modules/.bin/にインストールされることを理解していません。多くの場合、package.jsonで定義されているインストール済みモジュールのローカルバージョンを非常に簡単に使用できます。実際、npmスクリプトは./node_modules/.binをパスに追加します。

例として、package.jsonを次に示します。実行npm install && npm testすると、package.jsonで定義されたバージョンのカルマがインストールされ、testスクリプトの実行時にそのバージョンのカルマ(node_modules / .bin / karmaにインストールされている)が使用されます。

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

これにより、package.jsonが使用するカルマのバージョンを定義し、その構成をCIボックスでグローバルに保持する必要がないという利点があります。


testスクリプトには何がありますか?スクリプトを使用してインストールする方法の手がかりを教えてください。
iLemming 2013年

1
package.jsonを見てください。「scripts」プロパティの下で、「test」という別のプロパティを定義できます。その値は、を入力したときに実行するコマンドですnpm test。npmのドキュメントはかなり良いです:npmjs.org/doc/scripts.html
addisonj

4

npm@5.0.0以降では、次のように簡単に実行できます。

npm update <package name>

これにより、ファイルが自動的に更新されpackage.jsonます。最新バージョンを手動で更新して使用する必要はありませんnpm update <package name>

あなたはまだ古い動作を使うことができます

npm update --no-save

参考


1

実際に1つのパッケージのみを更新するには、NCUをインストールして、そのパッケージに対してのみ実行します。これは本当の最新にぶつかります。

npm install -g npm-check-updates

ncu -f your-intended-package-name -u

6
低品質の投稿、いくつかのより良い説明が役立つでしょう。
linuxfanがモニカを復活させる'12
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.