【103】Peer Dependencies(同バージョン依存)

7342 ワード

原文の住所:https://blog.domenic.me/peer-dependencies/
nodejs公式サイトにはこの文章が収録されています.住所は?https://nodejs.org/en/blog/npm/peer-dependencies/
著者はDomic Denicaで、Google Chromeチームに就職しています.github上のnpmオープンソースプロジェクトの参加者.
本文ではPeer Dependenciesを同じバージョンに翻訳しました.peer辞書には、「よく見る」という意味のほかに、「(官階、等級、地位、功績など)同等の人」という意味があります.ここでは文脈と合わせて、バージョン番号が同じという意味ですので、同じバージョンに翻訳して依存します.
以下は本文の内容です.
npmはパッケージマネージャとして優れています.特に言及に値するのは、子供を非常によく処理することができます.もし私のカバンが二つのモジュールに依存するとしたら、2番目のバージョンのrequestとsome-other-library(例を簡単に示すために、他のモジュールの名前をsome-other-libraryといいます.)は、some-other-libraryは1番目のバージョンのrequestに依存しています.
├── request@2.12.0
└─┬ some-other-library@1.2.3
  └── request@1.9.9
一般的には、この結果は非常に良いです.今はsome-other-libraryで呼び出されるrequest 1のバージョンのコピーがあります.同時に、私のバッグ依存のrequest 2のバージョンのコピーを邪魔しません.各コードは正常に動作します.
難しい問題:プラグイン
しかしながら、上記の処理方式は、例えばプラグインでは実行できない.プラグインパッケージが必ずしも直接的にホストパケットを使用しなくても、プラグインパッケージはしばしば他のホストパケットによって使用されることを意味する.Node.js開発パッケージの生態には、このようなテンプレートの多くの例があります.
  • Gunt plugins
  • Chai plugins
  • Levelup plugins
  • Express middleware
  • Winstonトラック
  • どのような用例に精通していなくても、クライアントの開発者が過去のときからjQueryプラグインを思い出すことができます.ページに入れたタグはプラグインをjQuery.prototypeに します.これは のメンテナンスに です.
    にプラグインのデザインは のためのものです.しかし、より なのは、プラグインの が のバージョンのホストにプラグインを するように したことです. えば、 のchai-as-promisedパッケージの1.xと2.xバージョンはchaiの0.5バージョンで されていますが、chai-as-promised 3.xバージョンはchai 1.x で されています.また、より いリズムとより ない バージョンの によってサポートされているGrauntプラグインの では、grunt-contrib-stylus 0.3.1 はgrunt 0.4.0 rc 4 で することができますが、grunt-contrib-stylus じバージョンはgrunt 0.4.0 rc 5 では できません.
    パッケージマネージャとして、npmがあなたの をインストールすると、npmの きな が に するバージョンです.しかし、npmの モードは、package.jsonの に するハッシュ を しており、プラグインに れると らかにエラーが します.ほとんどのプラグインは にホストパケットに していません. えば、gruntプラグインはrequire("grunt")コードを いたことがありません.プラグインが カバンをダウンロードしても、そのダウンロードしたコピーは されません.あなたのアプリケーションはプラグインを していますので、 カバンと がないかもしれません.また に りました.
    さらに、これらのホストパケットがツールAPIを しているため、 にホストパケットを することができるプラグインについても があります.プラグインのパッケージのpackage.jsonファイルに カバンを すると、ツリーに して カバンの のコピーを します.あなたが えているほどではありません. えば、wiston-mailが0.2.3 のハッシュ の で「wiston」を すると しましょう.「0.5.x」は、wiston 0.5.xがwiston-mail 0.2.3テストの のバージョンであることが です.アプリケーション として、 と いいバージョンが しいので、wistonとwiston-mailの バージョンを べて、バージョン をあなたのpackage.jsonの に れました.
    {
      "dependencies": {
        "winston": "0.6.2",
        "winston-mail": "0.2.3"
      }
    }
    しかし 、npm installコマンドを すると の が されています.
    ├── winston@0.6.2
    └─┬ winston-mail@0.2.3
      └── winston@0.5.11
    プラグインは なるWinston APIを しているので、この かりにくいインストールに します. はこの づきにくいインストールの を して、あなたに を えたいです.
    : バージョン (Peer Dependencies)
    たちはプラグインとそのホストパケット の を する が です.ある は、「 は1.2.xのセブでしか できませんので、インストールしたいなら、 のあるセブを ってください.」という をバージョン と びます.
    じバージョンに するアイデアが されて になりますか?9ヶ 、 をかけてボランティアでこの を させた 、 にフリーの を しました. はnpmに じバージョンの があります.
    に、npm 1.2.0は に じバージョンの を し、 のいくつかの しいリリースバージョンで き き じバージョンの を し、 が に きなものを えました. Issacはnpm 1.2.10をNode.js 0.8.19に しました. バージョンのNodeをインストールしたら、 じバージョンの を う ができました.
    As proof、I present you the result of trying to install jits 0.1.6 with npm 1.2.10: として、npm 1.2.10でjits 0.1.6のインストールを みた を せます.
    npm ERR! peerinvalid The package flatiron does not satisfy its siblings' peerDependencies requirements!
    npm ERR! peerinvalid Peer flatiron-cli-config@0.1.3 wants flatiron@~0.1.9
    npm ERR! peerinvalid Peer flatiron-cli-users@0.1.4 wants flatiron@~0.3.0
    あなたが ているように、ジッツは2つのFlatiron のパッケージに しています.これらのパッケージは じバージョンでFlatironの2つの のバージョンに しています. いものnpmはすでに に を つけてくれていますので、このエラーは0.1.7バージョンで できます.
    じバージョンの を う
    じバージョンの は に いやすい.プラグインを くと、 カバンのどのバージョンが じバージョンに しているかが かります.そして、 カバンのバージョンをpackage.jsonに れます.
    {
      "name": "chai-as-promised",
      "peerDependencies": {
        "chai": "1.x"
      }
    }
    chai-as-promisedをインストールする 、chai は にインストールします. はChai 0.x のChaiプラグインのみをインストールしてみたら、エラーが します.これはとてもいいです
    つの : じバージョンに する は、 の とは って、もっと であるべきです. じバージョンの を のパッチのバージョン にロックしてはいけません.Chaiプラグインの が けていて、Chaiプラグインの を にする がないだけでChai パッケージの バージョンが、Chaiプラグインの じバージョンをChai 1.4.1に させ、もう つのChaiプラグインは じバージョンをChai 1.5.0に していると、 じバージョンの を するのが くさいです.
    バージョン の を するための の は、 バージョン を に することである. たちは に カバンの バージョンの の だけがあなたのプラグインを すると します.したがって、あなたのプラグインがホームパケット1.xの バージョンと がある 、"~1.0"または"1.x"を いてこの を する.1.5.2バージョンの に する は、">= 1.5.2 < 2"を します.
    から、 じバージョンを って しましょう.