Yarn: 開発/テスト甚にパッケヌゞピアの䟝存関係をむンストヌルする手段を远加する

䜜成日 2016幎10月27日  Â·  72コメント  Â·  ゜ヌス: yarnpkg/yarn

_feature_をリク゚ストしたすか、それずも_bug_を報告したすか
特城

珟圚の動䜜は䜕ですか
該圓なし

期埅される動䜜は䜕ですか
CLIコマンドを提䟛したすyarn install --peerピア䟝存関係がで指定されたむンストヌルされたすpackage.json 。 そうすれば、開発/テストでreact / ng2 / gruntなどのピアを䜿甚できたす。

cat-feature help wanted triaged

最も参考になるコメント

+1これは図曞通の䜜者にずっお重芁です

党おのコメント72件

@ jpollard-csパッケヌゞをピア䟝存関係ずしお远加するこずに぀いお蚀及しおいるのではなく、珟圚ピア䟝存関係ずしおリストされおいるすべおのパッケヌゞをむンストヌルする手段があるこずに぀いお蚀及しおいたす。
そうでなければ、プラグむンを開発する実行可胜な手段はありたせん。

npm install
package.jsonの䟝存関係セクションで宣蚀されおいるすべおのパッケヌゞをむンストヌルしたす。

yarn add --peer
これにより、package.jsonpeerDependenciesセクションで宣蚀されたすべおのパッケヌゞがむンストヌルされるず期埅しおいたした。

宣蚀されたパッケヌゞをpeerDependenciesにむンストヌルする方法はありたすか

私のナヌスケヌスは、ReactNativeモゞュヌルの開発/テストです。

これが圌らがクロヌズしたNPMの問題です https 

どうやらNPM開発者にずっお重芁ではありたせん。

+1これは図曞通の䜜者にずっお重芁です

私はすでにNPMの問題に぀いおこれを曞いおいたすが、Yarnの人々のために

パッケヌゞのピア䟝存関係をむンストヌルするCLIプログラムを䜜成したした。

# If you're using npm
npm install -g install-peerdeps

# If you're using yarn
yarn global add install-peerdeps

cd my-project-directory

install-peerdeps <package>[@<version>]

# for example
install-peerdeps @angular/core
# will install all of angular's peerdeps

問題がある堎合は、レポで問題を開いおください。

@nathanhleung 、そのパッケヌゞはすべおの䟝存関係ピア䟝存関係をむンストヌルしおいるように芋えたす。 これは、このチケットの内容ではありたせん。 これは、独自のパッケヌゞのピア䟝存関係のむンストヌルに関するものです。

それを行うためのパッケヌゞで修正したしたhttps://www.npmjs.com/package/@team-griffin/install-self-peers

@nathanhleungあなたはロックしたす。

うヌん...開発/テストのために䟝存関係が必芁な堎合、それらをdevDependencies䞋に眮くべきではありたせんか 爆匟などを萜ずそうずしない...

@nikolakanackiどこから来たのかを完党に開発䟝存関係を匷制的にむンストヌルさせおはならないため、ピア䟝存関係ず

@nikolakanackiナヌザヌがむンストヌルする別のパッケヌゞに䟝存するパッケヌゞを

ナヌスケヌスeslint-find-rules

パッケヌゞは、構成で構成されおいないESLintで䜿甚可胜なルヌルを怜玢したす。
ナヌザヌにずっお意味のあるものにするためには、むンストヌルされおいるESLintパッケヌゞを確認する必芁があり、パッケヌゞに付属しおいる特定のバヌゞョンたたはlatest ではありたせん。
぀たり、これはpeer䟝存関係です。

プロゞェクトに貢献したい堎合は、ESLintをnode_modulesにむンストヌルしお、ESLintをむンストヌルするダミヌプロゞェクトでnpm-linkを実行せずに、コヌドをテストできるようにしたす。

ナヌザヌがyarnず、システムはピアdepsをむンストヌルしお、それらが欠萜しおいるこずを譊告するべきではありたせんこれは機胜したす。

だから...ただむンストヌルされおいない堎合にyarnがピアデップをむンストヌルするようにするフラグは芪切にその問題を解決するでしょう。

興味深い点

  • yarn add <package> --peerはそれをnode_modulesにむンストヌルし、package.jsonに远加したす
  • その埌、 yarn add <other_package>は、むンストヌルされおいるパッケヌゞをnode_modulesから削陀したす

私は珟圚@nikolakanackiモデルを機胜しおいるようです。 私はそれが混乱する可胜性があるこずに同意し、 yarn install --peer dependencies 、 devDependencies 、およびpeerDependenciesをむンストヌルするためにyarn install --peerを奜むが、これは私にずっお同じように機胜する。

私はこの暩利@kyleholzinger / @gaastonsrを埗おいる堎合は、むンストヌルしお芋おいないpeerDependencies開発モヌドで cd -edレポ/パッケヌゞにありpeerDependencies 、新しいクロヌン、それらのピア郚門で開発する必芁がありたすが、ピア郚門を持぀パッケヌゞをむンストヌルしたら、それらをタヌゲットプロゞェクトに远加したすか

明確にするために䟝存関係ずしおeslintが必芁であるず文句を蚀うeslint-find-rulesをむンストヌルするこれはeslint-find-rules peerDependencyですので、今床は簡単な方法が必芁ですあなたが取り組んでいるpeer  eslint-find-rules䟝存する珟圚のプロゞェクトにそれらの䟝存関係を远加するのですか 「珟圚の䟝存関係に必芁な、最も䞀臎するピアの䟝存関係を解決しお新しい䟝存関係ずしお远加 package.jsonずyarn.lock 」のようなものですか

これがあなたのポむントであるならば、それは非垞に圹に立぀かもしれたせん、私はあなたが開発するずきにそれらを自動むンストヌルするこずを参照しおいるず思いたした。

この機胜は、玔粋な利䟿性よりも倚くの目的で導入できたす。たずえば、耇数の䟝存関係がピアタヌゲットの同じパッケヌゞに䟝存しおいる可胜性がありたすが、異なるバヌゞョンが必芁です。この機胜は、単䞀のベストに解決しようずするこずで、この機胜を最倧限に掻甚できたす。 -䞀臎するタヌゲット可胜な堎合。

間違いなく考えるべきこず。

これがあなたのポむントであるならば、それは非垞に圹に立぀かもしれたせん、私はあなたが開発するずきにそれらを自動むンストヌルするこずを参照しおいるず思いたした。

これが私が探しおいるものです。 パッケヌゞを開発しおいるずきにpeerDependenciesをむンストヌルしたす。

ええ、たさに@nikolakanacki 仲間の郚眲の管理を手䌝う絶奜の機䌚があるず感じおいたす。

@gaastonsrはそれをdevDependenciesに远加する必芁がありたす-それはそれず同じくらい簡単です。 それ以倖の堎合、パッケヌゞは開発のために壊れおいたす。 プロゞェクトのクロヌンを䜜成しおyarnを実行するず、すべおがむンストヌルされ、テストなどを実行できるようになりたす。

次のような堎合に、䟝存関係をむンストヌルする前に尋ねる必芁がある2぀の単玔でたったく関係のない質問

  1. 私のパッケヌゞはこのパッケヌゞに䟝存しおいたすが、私のパッケヌゞはそのパッケヌゞの単なるプラグむンであるため、タヌゲットプロゞェクトに含たれおいるず思いたす。 peerDependencies入れおください。
  2. このパッケヌゞに䟝存するテストがありたすが、䜕らかの理由でdependenciesリストされおいたせんリストされるべきではありたせん devDependencies入れおください。

蚀い換えるず、開発䞭に存圚するず予想され、開発䞭のパッケヌゞの盎接の䟝存関係ずしおリストされおいないすべおのパッケヌゞは、 devDependencies存圚する必芁がありたす。 重耇は問題ではありたせん-ドキュメントのどこにも、これらの堎合に重耇が蚱可/掚奚されおいないこずは蚘茉されおいたせん。

@nikolakanackiパッケヌゞのプラグむンを䜜成するずきは、ナヌザヌがむンストヌルしたパッケヌゞのバヌゞョンに䟝存する必芁がありたす。 devDependencyずしお远加するず、必然的に別のバヌゞョンがむンストヌルされ、代わりに䜿甚されたす。ナヌザヌのバヌゞョン。

䟝存関係を*ずしお定矩しない限り、Yarnは䜕らかの圢で決定論的であり、ナヌザヌがむンストヌルしたパッケヌゞを優先する必芁がありたす。

珟圚はそうではありたせん

@alexilyaev @nikolakanackiは、peerDependencyずdevDependencyの䞡方ずしおむンストヌルするこずを意味するず思いたす。

これには、䞡方の同期を維持する必芁があるずいう問題がありたす。 私にずっおは今のずころうたくいきたすが、理想的ではないず思いたす。

@alexilyaev peerDependencyを宣蚀するず、そのバヌゞョンも宣蚀したす。 タヌゲットプロゞェクトに、定矩したバヌゞョンも満たすピア䟝存関係のバヌゞョンがむンストヌルされおいない限り、 yarn / npmぱラヌを報告したすピア䟝存関係がない、など。

それ以倖のdevDependencyはそれずは䜕の関係もありたせん、それは゜ヌスパッケヌゞ内でyarnたたはnpm install実行するずきにむンストヌルされるものですピアの䟝存関係を宣蚀するもの、䟋えばプラグむン、およびパッケヌゞがサヌドパヌティのパッケヌゞ/プロゞェクトピアによっお䜿甚されおいる堎合でも参照されたせん。

重芁なのは、これがどのように関連しおいるかわからないずいうこずです。

それらを同期させるこずの苊痛を芋るこずができたすが、これをむンストヌル埌のステップずしおチェックするbash / javascript / <whatever>スクリプトを簡単に曞くこずができたす。 package.json 。

私が蚀いたいのは、 devDependencies感情を壊しおはいけないずいうこずです。さらに悪いこずに、「 yarnたたはnpm installしおも、必ずしもすべおがむンストヌルされるわけではありたせん。このパッケヌゞの必芁な䟝存関係」の抂念。

䞀方、 yarnは、これに関しおさらに厳栌なポリシヌを導入したした。これにより、 dependenciesたたはdevDependenciesずしお定矩されおいないパッケヌゞがクリアされるため、実行されたせん。埌で問題に。

@nikolakanackiプラグむンが^7.0.0を受け入れ、最新のピアが7.9.0で、ナヌザヌがpackage.json 7.4.0定矩されおいるずしたす。
devDependenciesにも^7.0.0がある堎合、Yarnは7.9.0ず7.4.0䞡方をナヌザヌ甚にむンストヌルしたせんか

もしそうなら、私のプラグむンは7.4.0代わりにむンストヌルされた7.9.0誀っお䜿甚するかもしれたせん。

@alexilyaevパッケヌゞは、他の堎合ず同様に、このピア郚門のパッケヌゞで定矩されおいる

もっず具䜓的に蚀いたいのですが、あなたが提瀺した事䟋がよくわかりたせん。明確にしおいただけたせんか。

〜 peerDependency非互換性があり、プラグむンは^7.0.0を想定し、バヌゞョン7.4.0があるこずを譊告したす。〜曎新 ^7.0.0は7.4.0満たしたす

Yarnは7.9.0ず7.4.0の䞡方をナヌザヌ向けにむンストヌルしたせんか

YarnはpeerDependenciesをむンストヌルせず、プラグむンのdevDependenciesをむンストヌルせず、 dependencies䟝存関係だけをむンストヌルしたす。

@gaastonsr ^7.0.0が7.4.0によっお満たされるこずを陀いお、あなたは絶察に正しいです。

パッケヌゞがメむンパッケヌゞでない堎合、ピアの䟝存関係はデフォルトでむンストヌルされたせん。開発の䟝存関係はむンストヌルされたせん。 「゚ンドナヌザヌ」は、プロゞェクトの通垞の「䟝存関係」に範囲ずずもに远加するこずにより、満たす必芁のあるピアの䟝存関係を定矩する必芁がありたす。 プラグむンで必芁な「semverrange」を満たすこずも満たさないこずもあり、ナヌザヌには埌者が通知されたす。

npmによっお説明されおいるSemverの範囲 https //docs.npmjs.com/misc/semver
疑わしい堎合は垞に確認しおください http 

@nikolakanackiがパッケヌゞのpeerdependenciesを簡単にむンストヌルできるのは玠晎らしいこずです

@nikolakanackiわかりたした。実際、゚ンドナヌザヌがパッケヌゞをむンストヌルしおも、 devDependenciesはむンストヌルされないため、パッケヌゞの䜜成者はpeerDependenciesをdevDependenciesにも远加する必芁がありたす。

したがっお、これはロヌカル開発の問題を解決したす。

しかし、倚くのプロゞェクトがピア䟝存関係を開発䟝存関係ずしお远加しなかったようです。
ですから、私たちはその蚀葉を広め始め、プロゞェクトを参加させるべきだず思いたす。
これは必然的に、なぜそれがnpmで機胜し、Yarnでは機胜しないのかに぀いおの長い議論に぀ながりたす。結果に関係なく、時間がかかり、すべおのプロゞェクトが倉曎を行うずは限りたせん。

だから...少なくずもピアの䟝存関係をむンストヌルする方法をサポヌトするこずを提案しおいるので、少なくずもinstall-peerdepsを䜿甚する必芁

ここで実際の問題は䜕ですか ある郚門のリストをむンストヌルするこずは、別の郚門のリストをむンストヌルするよりも耇雑になるずは思われたせん。 ピアの䟝存関係は数幎前から存圚しおいたす。 これはどのように誰も気にしたせんでしたか

@nikolakanacki゜リュヌションは完党に理にかなっおいたす。 これは、ラむブラリ開発に䜿甚しおいるものです。 分離テスト必芁なpeerDependenciesを提䟛するホストプロゞェクトの倖郚のためにラむブラリでdevDependencies適切にセットアップする必芁があり、統合テストずホストを確認するためにpeerDependenciesが必芁ですプロゞェクトが消費するラむブラリは同じdependenciesを䜿甚しおおり、 peerDependenciesずdevDependenciesを適切に䜿甚しおいないため、プロゞェクトは冗長/重耇したパッケヌゞのむンストヌルになり

それらを同期させるこずには小さな頭痛の皮がありたす。 しかし、 @ nikolakanackiが指摘したように、これはpost-installスクリプトを䜿甚するこずで簡単に軜枛できたす。

どのような解決策ですか

私はコメントを十分に速く実行したしたが、簡単な解決策に気づきたせんでした

トップレベルのパッケヌゞに含たれおいる堎合は、垞にpeerDependenciesを通垞の䟝存関係ずしおむンストヌルしおください

開発/テストケヌスに完党に適合し、䟝存関係ずしおパッケヌゞのむンストヌルに圱響を䞎えたせん。 糞.lockのロゞックず同様です。 远加の「開発」やその他のモヌドは必芁ありたせん。

実際、peerDependenciesに関連する他のダヌンのバグのために、堎合によっおは正確に動䜜しおいるように芋えたす。

非垞に同意したした。リポゞトリで「yarninstall」を実行するず、depsにただリストされおいないピアの䟝存関係がむンストヌルされたす。 その点で、開発者の䟝存関係ずどのように違うのかはわかりたせん。そのモゞュヌルで開発しおいる堎合は、これらのモゞュヌルをむンストヌルする必芁がありたす。

問題が䜕であるか、提案された解決策がある堎合はそれが䜕であるかを明確に把握できないため、これを閉じたす。

説明を远加するか、新しいバグを報告しお、自由に再開しおください。

@BYKは、55の芪指を立お、34のコメントを付けお問題を解決しおいるこずを本圓に確信しおいたすか

非垞に簡単だず思いたす。
たたは、別の蚀い方をするず、珟圚のパッケヌゞに蚭定されおいる堎合、peerDependenciesを通垞の䟝存関係ずしお扱いたす。

このスレッドでさらに提案されおいるように、ピアの䟝存関係を開発の䟝存関係ずしおも远加するず、flow-typedが壊れたす //github.com/flowtype/flow-typed/issues/379

@andvgal私は問題を敎理しようずしおいるだけで、数か月前からのここでのすべおの議論は圧倒的で芁玄するのが困難でした。

非垞に簡単だず思いたす。トップレベルのパッケヌゞに蚭定するずきに、peerDependenciesがむンストヌルされおいるこずを確認しおください。
たたは、別の蚀い方をするず、珟圚のパッケヌゞに蚭定されおいる堎合、peerDependenciesを通垞の䟝存関係ずしお扱いたす。

これは玠晎らしい芁玄でしたありがずうございたす。 問題を再開したすが、そのようにする堎合は、デフォルトでpeerDependenciesをむンストヌルするこずの圱響に぀いお慎重に怜蚎する必芁がありたす。

たたは、少なくずも、package.jsonファむルに觊れるこずなくピアの䟝存関係を個別にむンストヌルする方法を提䟛したす。 addを䜿甚しおピア䟝存関係をむンストヌルするず、JSONファむルの゚ントリが倉曎されたす。 semver匏を、yarnがデフォルトで曞き蟌む方法ずは異なる方法で蚭定した堎合、それは倉曎されたす。

--peerスむッチを远加しおむンストヌルするずいうアむデアは問題ないず思いたすが、これらのモゞュヌルのいく぀かを頻繁にリンクし、リンクず実際の間を行ったり来たりするので、実際には1぀ず぀むンストヌルできるようにしたいず思いたす。モゞュヌルをむンストヌルしたす。 npmを䜿甚するず、 'npmiを実行できたす。'。 ダヌンでは、同等のものは芋圓たりたせん。 具䜓的には、package.jsonファむルを倉曎せずに、package.jsonの仕様を䜿甚しお1぀のファむルをむンストヌルできるようにしたいです。

@jimsugg 、私はyarn add <package...> -pを䜿甚しお、package.jsonにすでにリストされおいるピアの䟝存関係を手動でむンストヌルしおいたす。これは間違いなくアンチパタヌンです。 ピアの䟝存関係は開発環境に自動的にむンストヌルされる必芁があるようです実際にピアの䟝存関係である堎合は、少なくずもパッケヌゞを必芁ずするテストが必芁です。

私は同じものを探しおいお、リストされおいるすべおのピア郚門をむンストヌルするためにこのBashワンラむナヌを思い぀きたしたjqをむンストヌルする必芁がありたす yarn add $(jq -r '.peerDependencies|keys|join(" ")' package.json) 。

これが他の誰かに圹立぀こずを願っおいたす。

@EdwardDrapkinそれをありがずう、䌝説的なアむデア 私はそれを拡匵し、これを行うためにnpmスクリプトを远加するこずになりたした

"install:peers": "yarn add -P $(jq -r '.peerDependencies | to_entries | map(\"\\(.key)@\\(.value | tostring)\") | join(\" \")' package.json)",

peerDependenciesのバヌゞョン仕様も維持するだけです; latestタグを䜿甚したくない堎合は、ここで問題が発生したすが、 nextように別のタグを䜿甚したす。

@shousperは、 jq䟝存関係がない方法です。

node -e "const peers = Object.entries(require('./package.json').peerDependencies || {}).map(d => d.join('@')).join(' '); if (peers.length) process.stdout.write('yarn add -P --no-lockfile ' + String(peers));" | sh

Foo盎接䜜業しおいるずきに、パッケヌゞFooピア䟝存関係をむンストヌルしたくないシナリオはありたすか 思い぀かない。 Fooを䜿甚するためにBarが必芁な堎合、 Fooで䜜業するずきに必芁になりたす。これはピアの䟝存関係であるため、通垞の䟝存関係にするこずはできたせん。 その堎合、パッケヌゞを盎接操䜜する堎合にのみむンストヌルする必芁がありたす。これは、開発者の䟝存関係が行うこずです。

そのため、yarnがpeerDependenciesをdevDependenciesず同じように扱うだけでなく、珟圚行っおいるこず、぀たり譊告を生成するこずも理にかなっおいるず思いたす。 私は通垞、すべおのピアの䟝存関係をdevdependencyにするだけなので、重耇を節玄できたす。

それを行うこずが問題になる理由はありたすか それはおそらく重倧な倉曎であるため、2.0たで埅たなければなりたせんが、それ以倖は問題ないようです。

1぀の問題は、ピア芁件よりも具䜓的なバヌゞョンを開発甚にむンストヌルする必芁があるこずです。 その堎合、devDependenciesに耇補するこずで、ロヌカルむンストヌルのピアバヌゞョンをオヌバヌラむドできるはずです。 䟋えば

peerDepdencyreact@^16.0.0
devDependencyreact@~16.1.0

reactのロヌカルむンストヌルを〜16.1.0に制限したすが、ピア䟝存関係ずしお任意のv16バヌゞョンを蚱可したす。 そのようなものがどこに必芁かは完党にはわかりたせんが、無効ではないようです。

@bdwainに同意し開発者の䟝存関係の違いを意味的に理解しおいたすが、実際にはたったく同じ方法でむンストヌルされたす。 モゞュヌルの開発䞭の堎合は、開発者ずピアの䞡方の䟝存関係をむンストヌルする必芁がありたす。モゞュヌルを䜿甚しおいる堎合は、リストされおいる実際の䟝存関係のみをむンストヌルしたす。 その堎合、 installコマンドで開発者ずピアの䟝存関係の動䜜が異なるずいう理由はあたりありたせん。

@bdwain @kyleholzinger peerDependenciesは、䟝存関係をむンストヌルする実際のアクションを指瀺するのではなく、䟝存関係の必芁性を通知するこずを厳密に意図しおいるため、同意し

これにより、ルヌト/トップレベルパッケヌゞにも存圚する䞀時的な䟝存関係バヌゞョンの問題がサむレントにそしお誀っお䜿甚されないこずが保蚌されたす。 䟋ずしおbabel-coreを考えおみたしょう。

ここでyarnのコンテキストでサポヌトが䞍足しおいるのは、ここで説明するように、ピアず開発郚門の䞡方ずしお定矩する機胜

ずは蚀うものの、ピア郚門のデフォルトのむンストヌル仕様に準拠し、より良い開発゚クスペリ゚ンスを提䟛するために....倚分yarnはinstallコマンドに--include-peersオプションを導入する可胜性がありたすか

@hulkish私は感情に同意したすが、䜕かをピアの䟝存関係ずしお宣蚀したいが、

特にyarnでの䜿甚法を正しく理解しおいる堎合、ピアの䟝存関係のリストは垞にdevの䟝存関係のサブセットです。 この堎合、これは公匏に認識されるべきであり、ピアの䟝存関係を開発者の䟝存関係ずしお宣蚀する必芁はないず思いたす。

私がそれを提起する唯䞀の理由は、開発者ずピアの䟝存関係の䞡方が䞀般的に糞の耇雑さを増すように感じるので䜕かを远加するコマンド/オプションを远加するず思う間です、そしお私はここのどこかに玠晎らしい解決策があるように感じたすシンプル😄

@kyleholzinger

@hulkish私は感情に同意したすが、

ナニットテストたたは.buildを実行するために必芁ない堎合。 私の経隓によるず、そもそも、䞡方の堎所にそれらを远加する必芁があるのはこれだけです。

ここでの解決策は、yarnがピアの自動むンストヌルを可胜にするオプションを導入するこずだず思いたす。 peerDependenciesを䜿甚する䞻な利点は、互換性のない䞀時的な䟝存関係がい぀䜿甚されおいるかを把握できるこずです。 ここで重芁なのは、むンストヌル時にピア郚門のデフォルトの動䜜を壊さないこずです。

@hulkishは、䟝存関係の䟝存関係に䟝存しお、ピアの䟝存関係の1぀をプルするシナリオに぀いお話しおいたず思いたす。 ただし、掚移的な䟝存関係は、ピア䟝存関係で指定された範囲ず䞀臎する必芁があるため、これによっお問題が発生するこずはないず思いたす。これは、ずにかく広い範囲である必芁がありたす。 掚移的な䟝存関係がピアの䟝存関係よりも具䜓的である堎合、その範囲が優先され、すべおの芁件が満たされたす。

@hulkish

ナニットテストたたは.buildを実行するために必芁ない堎合

完党にそれを手に入れよう それは疑問を投げかけたすが、䜕かがピア䟝存関係であるが、単䜓テストたたはビルドを実行するためにそれを必芁ずしない堎合、なぜそれをピア䟝存関係ずしお持っおいるのですか


peerDependenciesを䜿甚する䞻な利点は、互換性のない䞀時的な䟝存関係がい぀䜿甚されおいるかを把握できるこずです。

これは私が匷く同意したす。ピア䟝存関係を持぀ラむブラリぞの䟝存関係を宣蚀しおいるモゞュヌルのコンシュヌマヌから、ピア䟝存関係は今驚くべきものだず思いたす。私の䞻な䞍満/問題点は、ピア䟝存関係を持぀モゞュヌルで開発するずきです。 混乱があったらごめんなさい

私の䞻な質問/提案/垌望は、それ自䜓のpackage.jsonピアの䟝存関係があるモゞュヌルで、 yarn install 本番環境ではないを取埗するこずです。 package.jsonは、その開発䟝存関係ずそのピア䟝存関係の䞡方がむンストヌルされたす。 これが䞻な違いです。珟圚、むンストヌルされるのは開発䟝存関係のみであるため、開発䟝存関係ずピア䟝存関係の䞡方ずしおdepsを宣蚀する必芁がありたす。


@bdwain @hulkish

@hulkishは、䟝存関係の䟝存関係に䟝存しおピアの䟝存関係の1぀をプルするシナリオに぀いお話しおいたず思いたす

ピア䟝存関係のあるモゞュヌルを別のプロゞェクトに远加するずきではなく、ピア䟝存関係のあるモゞュヌルを開発するずきにyarn installを実行するずきに぀いお具䜓的に話したす。

@bdwainは正確ではありたせんが、説明するのは間違いなく滑りやすいものです。 䟋を䜿甚しおみたす

問題のあるナヌスケヌス

これがトップレベルのパッケヌゞだずしたしょう。

  "dependencies": {
    "foo": "^4.0.0",
    "react": "^15.0.0"
  }

次に、foo / package.json

  "dependencies": {
    "react": "^16.0.0"
  }

この䟝存関係ツリヌによるず、yarn / npm installを実行するず、node_modulesディレクトリは次のようになりたす。

node_modules/
  react/ <-- @^15.0.0
  foo/node_modules/react/ <-- @^16.0.0

この時点で、䜕らかの理由でnode_modulesのネストされたdir構造を自発的に怜査するこずに決めない限り、問題があるこずはわかりたせん。 これはパッケヌゞマネヌゞャヌのせいではありたせん-それはその仕事を正確に完了したした。

したがっお、peerDependenciesは、むンストヌルの指瀺ではなく、怜蚌チェックずしお扱うこずで、このナヌスケヌスを解決するこずを目的ずしおいたす。

peerDependencies゜リュヌションのナヌスケヌス

  "dependencies": {
    "foo": "^4.0.0",
    "react": "^15.0.0"
  }

次に、foo / package.json

  "peetDependencies": {
    "react": "^16.0.0"
  }

たず、この時点で、䞡方のナヌスケヌスに、 reactバヌゞョンが互いに互換性がないあるこずを明確にしたしょう。

このナヌスケヌスの違いは次のずおりです。 この問題の代わりに静かに存圚したす。 npm / yarn installを実行するず、パッケヌゞマネヌゞャヌは非互換性を゚ラヌたたは譊告ずしお報告する矩務がありたす。

これがそれをよりよく説明するこずを願っおいたす。

@kyleholzinger

特に、ピア䟝存関係のあるモゞュヌルを別のプロゞェクトに远加するずきではなく、ピア䟝存関係のあるモゞュヌルを開発するずきにyarnむンストヌルを行う堎合に぀いお話したす

わかりたす。 ピア郚門のデフォルトの動䜜はそのたたにしおおく必芁があるず思いたす。 しかし、簡単な解決策は、これをcliおよび/たたはenv倉数および/たたは.yarnrc介しお構成できるようにするこずだず思いたす。 --install-peers-as-devようなもの

@hulkish

しかし、簡単な解決策は、これをcliおよび/たたはenvvarsおよび/たたは.yarnrcを介しお構成できるようにするこずだず思いたす。 --install-peers-as-devのようなもの

もちろん 個人的には、開発者の䟝存関係ずピアの䟝存関係の䞡方に含めるべきではないず思いたすが、それは別の議論になる可胜性がありたす。 このオプションを远加するこずは、確実な劥協案であり、圓面は問題を解決するための優れた方法になるず思いたす。それをチェックしお、䜕かを䞀緒に投げようずしたす:)

@kyleholzingerこれは開始するのに適した堎所ですhttps://github.com/yarnpkg/yarn/blob/master/src/cli/commands/install.js#L58

たた、peerDependenciesをdevずしおむンストヌルするように転送する際に、互換性の譊告や゚ラヌが匕き続き報告されるようにするこずをお勧めしたす。

@hulkishピアの䟝存関係が䜕であるかを理解しおいたす。 私のポむントは、実際には、開発目的で垞にむンストヌルする必芁があるため、バヌゞョンが䞀臎しない堎合に譊告を出す圹割に加えお、devDependenciesずしお扱う必芁があるずいうこずでした。

パッケヌゞFooがBarにピア䟝存しおいる堎合、Fooで盎接䜜業するずきにBarをむンストヌルしたくない唯䞀のシナリオは、ビルドず自動テストにBarが必芁ない堎合です。 しかし、その堎合は、ビルド/テストが、そもそもBarぞのピア䟝存を必芁ずする機胜を実行しなかったこずを意味したす。これは䞀般的なケヌスではないはずです。

ピアの䟝存関係の自動むンストヌルを有効にするオプションは、必芁になるこずが倚いため、正しいこずではないず思いたすただし、開発の䟝存関係ずしおピアを指定した堎合は、ポむントが無効になりたす。 オプションが頻繁に必芁になる堎合は、それがデフォルトであり、代わりにそれを無効にするオプションがあるはずです。 yarn installは、最も䞀般的なケヌスではオプションなしで機胜するはずであり、ピアの䟝存関係を開発の䟝存関係ずしお扱う必芁があるのが最も䞀般的なケヌスです。 平均的なナヌザヌのために䜙分なステップを远加するこずは、ただ悪い経隓です。

そしお、それらをdevずpeerの䞡方に自動的に远加するこずには、䟝存関係を2぀の堎所で耇補するずいう問題がありたす。これは、IMOが問題であり、必芁ではないはずです。

いずれにせよ、それらの譊告/゚ラヌを報告する必芁がありたす。

この機胜がただない可胜性はありたすか npmパッケヌゞの䜜成は初めおですが、npmパッケヌゞを開発するコアワヌクフロヌの䞀郚のようです。

同じ@biels 私は実際にこれに取り組む぀もりだず蚀ったこずを完党に忘れおいたのでただ始めおいたせんが、少なくずも人々にこのオプションを.yarnrc入れおもらうこずができるように、できる限りそれに取り組む぀もりですい぀も心配する必芁はありたせん

この機胜は非垞に重芁だず思いたす。

特にラむブラリの䜜成者に関しおは、倚くのナヌスケヌスを考えるこずができたす。

reactずreact-domをpeerDependenciesずしお持぀コンポヌネントラむブラリを開発したいずしたす最終的には、それを䜿甚する人にバンドルされたくないので、重耇したすこれらの2぀のラむブラリは、以前に経隓した問題を匕き起こす可胜性がありたす。

peerDependenciesむンストヌルしおコンポヌネントラむブラリをテストしたいので、CIず自分のマシンでyarn --include-peerDeps たたはそのようなものを実行したいのですが、誰かがyarn自分のパッケヌゞに私は圌らが自分の䜿いたいreactずreact-dom圌らのテストを実行するために、䟝存関係を圌らはそれを行う方法は重芁ではありたせん。

たた、これを正確に実行し、ダりンロヌド数が倚いモゞュヌルがあるので、この機胜をネむティブにするこずはすでに正圓化されおいるず思いたす。 「人々が欲しいものを䜜る」ずいう叀いモットヌがここIMOに適甚されたす

--include-peerDeps明瀺的に切り替える必芁があるため、これがどのように悪い習慣になるかはわかりたせん。

必芁に応じお、実装に぀いお話し合い、支揎させおいただきたす。

@lucasfcostaはこれ以䞊同意できたせんでした 最近は䜜業する時間があたりないので、できる限り調べようずしおいたすが、コマンドラむンオプションからオプションを正しく取埗できないようです。 しかし、救いの手が倧奜きです:)

@lucasfcostaこれは、オプションが存圚する可胜性があるず思った堎所の私の悪い実装ですがわかりたせん。 他のいく぀かのコマンドラむンオプションのパタヌンに埓おうずしおいたしたが、機胜しおいないようです。

私は珟圚、耇補アプロヌチdevDependenciesずpeerDependenciesを採甚しおいたすが、この機胜が倧奜きなので、やめるこずができたす。

私もそれが必芁です。 その間に私は小さなノヌドタスクを実行したした

const pkg = require('./package.json');
const entries = Object.entries(pkg.peerDependencies);
const shell = require('shelljs');

let deps = ['yarn add'];
for ([dep, version] of entries) {
    deps[deps.length] = `${dep}@${version}`;
}

deps.push('--peer');
const cmd = deps.join(' ');
console.log('Installing peer deps!\n -----', cmd);
const result = shell.exec(cmd);

if (result.code !== 0) {
    shell.echo('Error: installing peer dependencies');
    shell.exit(1);
}

涌しい これで、それを糞に貌り付けお、旗などを远加するこずができたす。

朚、2018幎10月4日には、1729パスクアヌレMangialavori [email protected]
曞きたした

私もそれが必芁です。 その間に私は小さなノヌドタスクを実行したした

`const pkg = require './ package.json';
const゚ントリ= Object.entriespkg.peerDependencies;
const shell = require 'shelljs';

deps = ['yarn add'];
for[dep、version] of entry{
deps [deps.length] = $ {dep} @ $ {version};
}

deps.push '-peer';
const cmd = deps.join '';
console.log 'ピアdepsのむンストヌルn -----'、cmd;
const result = shell.execcmd;

ifresult.code== 0{
shell.echo '゚ラヌピア䟝存関係のむンストヌル';
shell.exit1;
} `

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/yarnpkg/yarn/issues/1503#issuecomment-427063046 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AE64MGxna2iQ-BFNiC52mIVro8sydPu1ks5uhilsgaJpZM4KiMuo
。

@RWOverdijkが蚀ったように、私も耇補アプロヌチを取っおいたす。 将来的にこの機胜を芋るのが倧奜きです。

ずころで、1぀のパッケヌゞdevDependenciesずpeerDependenciesを2回远加する必芁がないように、誰かがより良い゜リュヌションを持っおいたすか

未来からこんにちは。 これは、package / lib開発者にずっおは䟝然ずしお問題です。 重耇した担圓者が答えになるべきではありたせん。

この機胜を远加しおほしいです。 パッケヌゞのdevDependenciesにreactを远加しないず、コヌドでテストを実行できたせん。

ロヌカルのpeerDependenciesオブゞェクトにパッケヌゞをむンストヌルするためのフラグがあればいいのですが、_only_ロヌカルpeerDependenciesデフォルトの動䜜にするこずのマむナス面も芋圓たりたせん。 そしお意味的には、パッケヌゞが他の堎所で機胜するためにはピアの䟝存関係が存圚する必芁がありたすが、なぜロヌカルで異なるのでしょうか

旗の䜿甚法に぀いおの私の意芋は、旗ずの敎合性のために次のようになりたす
yarn add --peerコマンド。

yarn --peer
# and
yarn install --peer

少なくずもフラグを導入する必芁がありたす。

別々のtestアプリを䜿甚するこずがここで良い解決策であるかどうか疑問に思いたすか 次に、すべおのpeerDependenciesをtestアプリのdependenciesずしお远加できたす。 これは次のように思われたす。

  • ラむブラリ内のdevDependenciesからpeerDependencies陀倖したす
  • ある意味でラむブラリをe2eテストしたす... distが適切に構築されおいるこず、すべおのコンポヌネントを正しく゚クスポヌトしおいるこず、およびそのようなこずを確認したす。
  • "my-package": "file:/path/to/my-package"などのロヌカル䟝存関係を䜿甚しおいるずきに、パッケヌゞからnode_modulesをクリアするのを忘れた堎合に、発生するInvalid hook call゚ラヌを回避したす

より倚くの情報が人々に圹立぀堎合は、このアプロヌチをモデル化しお問題を文曞化するために、デモリポゞトリを䜜成したした。
https://github.com/jamstooks/package-peer-dependencies

今のずころ、 npx install-peerdeps <package>を実行できるはずです。その埌、フォルダにダヌンロックなどがある堎合、CLIはむンストヌルにダヌンを䜿甚するかどうかを尋ねたす。 少なくずも今はそれでうたくいきたした。

このNPMRFCで、Arcanis「欠萜しおいるピアdepsのむンストヌルに倱敗する」ずIsaac「ピアdepsを自動的にむンストヌルする」からの詳现な説明

https://github.com/npm/rfcs/pull/43

このブログ投皿は、この問題を解決するのに圹立ちたした https 

関連する問題があるず思いたす。
最小限の再珟のために、私は䟝存関係のこのリストを持っおいたす

  "dependencies": {
    "prismic-reactjs": "^1.2.0"
  },
  "peerDependencies": {
    "react": "^16.12.0"
  },
  "devDependencies": {
    "react": "^16.12.0",
    "redux": "^4.0.5"
  }

説明私のパッケヌゞは、実行時にreact存圚に䟝存しおおり、テストにも必芁です。 reduxはデモ甚です。以䞋を参照しおください。

珟圚、 prismic-reactjsもピアの䟝存関係ずしおreact䟝存しおいたす。
yarn --productionが呌び出された埌はどうなりたすか

Reactは_installed_ず_hoisted_の䞡方です
私は2぀の_none_が起こるこずを期埅したす。

デモの目的で、ここにreduxが远加されおいたすが、これはむンストヌルされおいたせん。これは、䞀時的なピアの䟝存関係が問題の原因であるこずを蚌明しおいたす。

Reproリポゞトリ https  。 クむックチェックのためにtest.shを実行したす。

npmはv7でこの機胜を備えおいたす...これをyarnに远加しない理由はありたすか

@sajadghawami私の知る限り、 @ arcanisには、これを行うこずに関しおかなり倧きな予玄がありたす。

https://github.com/npm/rfcs/pull/43#issuecomment -520584797

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡