2017-09-06 14 views
1

リビジョン管理のアプリケーションでnode_modulesフォルダをコミットしていません。私たちのビルドプロセスと開発者の指示には、必要なノードモジュールをインストールするための初期チェックアウト時に手動で「npm install」を実行することが含まれます。私たちのpackage.jsonファイルは、依存関係のバージョンを詳しく示します。NPM/Node/package.jsonによるリビジョン管理と依存関係解決

最近私の自動ビルドは壊れました。なぜなら、私が可能ではないと考えていたサードパーティのコミットが原因でダウンストリームの依存関係が壊れたからです。次のように私たちのpackage.jsonファイルは次のとおりです。

{ 
      "name": "test-package", 
    "description": "Test Package", 
     "version": "1.0.0", 
     "license": "UNLICENSED", 
     "private": true, 
    "repository": { "type": "svn", "url": "" }, 
    "dependencies": { 
    "extend": "3.0.0", 
    "windows-registry": "0.1.3" 
    } 
} 

具体的には、「ウィンドウ・レジストリ」バージョン「0.1.3」への依存が原因で、そのモジュールの子依存性(「参照」バージョン「1.2.0で破りました")。 「ウィンドウ・レジストリ」package.jsonファイルから依存関係は次のとおりです。

"dependencies": { 
     "debug": "^2.2.0", 
     "ffi": "^2.0.0", 
     "ref": "^1.2.0", 
    "ref-struct": "^1.0.2", 
    "ref-union": "^1.0.0" 
} 

私は、「ウィンドウ・レジストリ」を引き受けるには、必ず「REF」パッケージのバージョン「1.2.0」を参照しますが、それはでした実際にバージョン1.3.4を引っ張ってから最近1.3.5というビルドを壊しました。私はpackage.jsonファイルの "ref"がバージョン "1.2.0"でないことを確認しました。 "ref"のpackage.jsonファイルは巨大で、ファイル内のさまざまなキーの下に "[email protected]^1.2.0"のような値がたくさんあります。 package.jsonファイルの興味深い部分は以下のとおりです。

{ 
    /* Lots of other stuff */ 
    "_spec": "[email protected]^1.2.0", 
    "version": "1.3.4" 
} 

なぜNPMは、同じ一貫した再現性の依存関係グラフをロードしていませんか? node_modulesをリビジョンコントロールにコミットする必要がありますか?

答えて

1

参照this SO答え:簡単に言うと

を、チルダは、最新のマイナーバージョン(中央の番号)と一致します。 〜1.2.3はすべての1.2.xバージョンと一致しますが、1.3.0が不足します。

一方、キャレットはよりリラックスしています。最新のメジャーバージョン(最初の番号)に更新されます。^1.2.3は、1.3.0を含む1.x.xのリリースにはマッチしますが、2.0.0ではホールドオフになります。限り、あなたの他の質問など

:あなたは間違いなくあなたのnode_modulesフォルダをコミットしないで必要があります。むしろ、package-lock.jsonファイルをコミットする必要があります。これにより、依存関係がそのままフリーズされます。 shrinkwrapコマンドは、典型的には、このために使用されたが、ロックファイルV5 npmのように、デフォルトで生成され

私はまた、複雑な依存関係ツリーを管理でより良いと高速です npm互換性のあるパッケージマネージャがある yarn、覗くことをお勧め

npmリポジトリは、多かれ少なかれsemverを施行以来

最後に、それは各増分はは非改行変化対壊すの期間を意味するとを想定しているものを認識することができます。あなたのケースでは、パッケージ作成者がセマンティックバージョニングに従っていた場合、変更は下位互換性があるはずです。

バージョン番号MAJOR.MINORが指定されています。PATCH、インクリメント:

    あなたは互換性のないAPIの変更を行う
  • メジャーバージョン、あなたは後方互換性のある方法で機能を追加
  • マイナーバージョン、そしてあなたは後方互換性のバグ修正を行い
  • パッチバージョン。
+0

私の中で、プログラマは、正規表現のようなcarretを読みたい、それが私には、より具体的に感じている - それは私がより良いドキュメントを読んでいないために何を得るのです。あなたの依存関係が一貫していることを保証する唯一の方法は、あなたのノードモジュールもコミットすることだと思いますか?それは大きく、コンパイルされたバイナリがbinフォルダに入っているなど、実際には臭いです。これには何か別の選択肢がありますか? – jriffel73