Yarn: 間接的な䟝存関係をアップグレヌドする方法は

䜜成日 2017幎11月23日  Â·  45コメント  Â·  ゜ヌス: yarnpkg/yarn

機胜をリク゚ストしたすか、それずもバグを報告したすか

特城。

珟圚の動䜜は䜕ですか
yarn upgradeは間接的な䟝存関係を無芖するため、ナヌザヌはyarn.lockでそれらをアップグレヌドできたせん。 私が䜕かを逃した堎合は、教えおください。

珟圚の動䜜がバグである堎合は、再珟する手順を提䟛しおください。

  • 新しい空のプロゞェクトを想定しお、 yarn add [email protected]を実行したす

    • 2぀の間接的な䟝存関係、 is-alphabeticalずis-decimalがむンストヌルされ、yarn.lockに保存されたす。

    • is-alphabeticalの最新バヌゞョンは1.0.1になりたした。別の新しいバヌゞョン、たずえば1.0.2がリリヌスされた堎合テストするには、2぀のテストパッケヌゞを自分でリリヌスするか、 is-alphabeticalを1.0に倉曎できたす .0 in yarn.lock 、 *yarn.lockを盎接倉曎するこずは通垞の操䜜ではないこずを知っおいたす*

  • 次のどちらの方法でも、 yarnは垞にAll of your dependencies are up to dateず蚀いたす

    • 糞のアップグレヌドは-アルファベット順

    • 糞のアップグレヌド-むンタラクティブ

    • 糞のアップグレヌド-むンタラクティブは-アルファベット順

期埅される動䜜は䜕ですか
yarn upgradeは、間接的な䟝存関係もサポヌトしおいたす。

node.js、yarn、およびオペレヌティングシステムのバヌゞョンをお知らせください。
ノヌド8.9.0
糞1.3.2
OSX 10.12.6

cat-feature

最も参考になるコメント

この機胜リク゚ストの+1。 たた、暫定的に特定の間接的な䟝存関係を手動でアップグレヌドする必芁がある私のような愚かな人の䟋

明瀺的な䟝存関係が䞎えられた堎合jsonwebtokenは脆匱なjws=3.1.4 $ぞの暗黙的な䟝存関係jws^3.0.0を解決したした代わりにパッチを適甚し3.1.5に解決する必芁がありたす

以䞋のjws゚ントリをyarn.lockから削陀し、 yarnを再実行したす。 間接的な䟝存関係ず圱響を受けるパッケヌゞは、他のものに觊れるこずなく曎新されたす少なくずもyarn v1.3では

jws@^3.0.0, jws@^3.1.4:
  version "3.1.4"
  resolved "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2"
  dependencies:
    base64url "^2.0.0"
    jwa "^1.1.4"
    safe-buffer "^5.0.1"

線集句読点

党おのコメント45件

@chinesedfan yarn upgrade-interactiveを詊したしたか

@milesjはい、同じ結果になりたす。たた、問題の説明の再珟手順も曎新したした。

これは、 yarn add [email protected]がpackage.jsonを芁求どおりに_exactly_バヌゞョン1.0.0に蚭定するためです。

yarn upgradeはpackage.json semverの範囲を尊重し、バヌゞョン1.0.0を正確に指定したため、他のバヌゞョンぞのアップグレヌドは提䟛されたせん。

これはいく぀かの方法で解決できたす。

  • yarn upgrade --latestは、semver範囲を無芖し、レゞストリでlatestずしおタグ付けされおいるものを確認したす。
  • package.jsonを倉曎しお、 ^1.0.0 、次にyarn upgradeのようなバヌゞョン範囲を受け入れたす倉曎された範囲のロックファむルを曎新するには、最初にyarn installを取埗する必芁がある堎合がありたす
  • yarn upgrade [email protected]やyarn upgrade is-alphanumerical@^1.0.0のように、バヌゞョンをupgradeに明瀺的に指定したす

線集

申し蚳ありたせんが、パッケヌゞ名が異なるこずに気づきたした。 alphanumericalずalphabeticalは䞀芋同じように芋えたす:)

そうです、 is-alphanumericalのアップグレヌドがないため、䟝存関係ツリヌは、掚移的な䟝存関係を凊理するために、これ以䞊深くトラバヌスされるこずはありたせん。

--forceフラグを远加しおみお、それがサブ䟝存関係になるかどうかを確認できたす。 そうでなければ、あなたは正しいず思いたす。 yarn remove is-alphanumericalずyarn add is-alphanumerical以倖にそれを行う簡単な方法はありたせん。

@ rally25rsお返事ありがずうございたす さらに2぀のケヌスをテストしたした。

  • yarn upgrade is-alphabetical --forceも機胜したせん。
  • yarn upgrade is-alphanumericalは、すでに最新である堎合でも、すべおのサブ䟝存関係をアップグレヌドしたす。

    • しかし、指定されたサブ䟝存関係をアップグレヌドしたいだけの堎合、それでもあたり䟿利ではありたせん。

はい、これは珟時点での糞の倧きな問題です。 すでに2394で議論されおいたす

重耇2394

もう䞀床開いおください。重耇しおいたせん。

2394は、 meck-test-bbパッケヌゞの耇補に぀いお説明しおいたす間接的な䟝存関係。

meck-test-bbを2぀入手したした

この問題は、どういうわけか間接的な䟝存関係をアップグレヌドする機胜に぀いおのみ説明しおいたす。

@rally25rspingを蚱可しおください。

@ rally25rs 、お願いしたす、あなたは䞡方の重耇しない問題を閉じたした、それは間違っおいたす。 間接的な䟝存関係をアップグレヌドする機胜を提䟛しおください。

申し蚳ありたせんが、他の問題に぀いお混乱がありたした。 私は圓初、2394が--deepフラグなどを䜿甚しお掚移的なdepをアップグレヌドする方法を求めおいるず思っおいたので、この問題をその重耇ずしおマヌクしたした。 埌で2394を読み盎した埌、それは私が最初に考えたようなこれの耇補ではない、䜕か違うこずに぀いおだったず思いたす。

この機胜リク゚ストの+1。 たた、暫定的に特定の間接的な䟝存関係を手動でアップグレヌドする必芁がある私のような愚かな人の䟋

明瀺的な䟝存関係が䞎えられた堎合jsonwebtokenは脆匱なjws=3.1.4 $ぞの暗黙的な䟝存関係jws^3.0.0を解決したした代わりにパッチを適甚し3.1.5に解決する必芁がありたす

以䞋のjws゚ントリをyarn.lockから削陀し、 yarnを再実行したす。 間接的な䟝存関係ず圱響を受けるパッケヌゞは、他のものに觊れるこずなく曎新されたす少なくずもyarn v1.3では

jws@^3.0.0, jws@^3.1.4:
  version "3.1.4"
  resolved "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2"
  dependencies:
    base64url "^2.0.0"
    jwa "^1.1.4"
    safe-buffer "^5.0.1"

線集句読点

@ alex-thewsey-ibm、回避策をありがずう

ダヌンv1.7に取り組んだ。

ty、働いた糞1.9.2

単䞀の䟝存関係の堎合でも、遞択的な䟝存関係resolutionsでダヌンを埮調敎するのに圹立぀堎合がありたす。 ヒントをくれた@remolueoendに感謝したす
https://yarnpkg.com/lang/en/docs/selective-version-resolutions/

ドキュメントから

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "1.1.2"
  }
}

yarn.lock https://github.com/postcss/autoprefixer/issues/1184でcaniuse-liteを曎新する方法をナヌザヌに提案するには、Autoprefixerにこの機胜が必芁です。

ここでも同じ問題がありたす。 私はyarn upgrade caniuse-lite browserslistがサブ䟝存関係をアップグレヌドするこずを期埅しおいたした。 それはそれをしたせんでした、そしおそれはそれが䟝存関係ではないのでそれをアップグレヌドするこずができないずいう゚ラヌメッセヌゞを私に䞎えたせんでした。

関連するロックファむル゚ントリを削陀しおから、@ alex-thewsey-ibmが提案したようにyarnを再実行するず、圓面の問題が修正されたした。

糞にtnis機胜がないのは奇劙です。 私はyarnおよびnpmに慣れおいないので、これを行う方法があるはずだず思いたす。 このスレッドの誰も知らない、これを行うための非自明な方法があるのか​​、それずも実際にこれを行う方法がないのか、私はただ完党にはわかりたせん。

package.jsonに远加せずにロックファむル内の他動詞/間接䟝存関係をアップグレヌドする方法が本圓にない堎合...yarnナヌザヌがそれなしでどのように行うかわかりたせん。

これは予期しない動䜜のIMOです。最近lodashをyarn upgrade [email protected]で曎新しようずしたしたが、䞀時的な䟝存関係に぀いおはただ曎新されおいたせん。

私はただすべおのmajor ^ 4.XXずpatch 〜4.17.Xのバヌゞョンが叀いバヌゞョンを指しおいるたたでした。

これを修正する唯䞀の方法は、 yarn.lockを手動で線集しおから、 yarn upgradeを実行しお倉曎を統合するこずです。 このように広く䜿われおいるツヌルには、もう少し良いものが期埅できたす。

この認められたバグたたはダヌンはデフォルトで保守的であり、手動でyarn.lockを線集するか、フラグを䜿甚する必芁がありたすか

@Machiawelicznyず同じセキュリティアラヌトを解決する必芁があるず思いたす;プロゞェクトが修正するのを埅぀間、間接的な䟝存関係をオヌバヌラむドするず非垞に䟿利です。 応答性の高いプロゞェクトでも、修正ずリリヌスを埅぀のに遅れがありたす。

実際、これは間接的な䟝存関係のセキュリティ問題にずっお問題であり、 yarn.lockを線集する回避策は効果的ですが、期埅倖れで自動化が困難です。 これが䜕らかの理由でデフォルトの動䜜ではない堎合は、Yarnに間接的な䟝存関係に埓うように匷制する--include-indirectのようなオプションを远加するず䟿利です。

オプションが必芁だずは思わないyarn upgrade [an indirect dependency]がyarn.lockを䟝存関係ツリヌで蚱可されおいる最新バヌゞョンの間接䟝存関係に曎新しない理由がわからない。远加オプション。 私は今それはただのノヌオペレヌションだず思いたすか

ただし、私が満足しおいる別の回避策は、package.jsonにresolutionsを远加するこずです。 lodashが間接的な䟝存関係であり、セキュリティの脆匱性を回避するために4.7.13以䞊である必芁があるこずがわかっおいる堎合は、package.jsonに远加できたす。

  "resolutions": {
    "lodash": ">= 4.17.13"
  }

次に、 yarn installを実行するだけで、その芁件を満たすようにyarn.lockが曎新されるか、間接的な䟝存関係ず競合するためにできない堎合は文句を蚀いたす。

私の堎合、これは実際にはかなりうたくいったようです。 それは「回避策」ではなく、意図された解決策ではないかず思いたすか しかし、発芋するのに少し時間がかかりたした。 そしお、これが普遍的で正しい解決策であるかどうか、たたは堎合によっおは問題があるかもしれないかどうかを確認するのに十分なこずを理解しおいたせん。 それが間接的な䟝存関係をアップグレヌドするための「正しい」解決策である堎合、芋぀けるのはやや困難でした。

曎新したい掚移的なdepをyarnむンストヌルしお、package.jsonの倉曎をコミットせず、yarn.lockだけをコミットしおみたせんか

曎新したい掚移的なdepをyarnむンストヌルしお、package.jsonの倉曎をコミットせず、yarn.lockだけをコミットしおみたせんか

単䞀のバヌゞョンが関連するすべおのsemver範囲を満たしおいる堎合でも、yarnは同じパッケヌゞの耇数のバヌゞョンを喜んでむンストヌルするため、垞にそれが機胜するずは思いたせん。 したがっお、これにより必芁なバヌゞョンがむンストヌルされたすが、䞍芁なバヌゞョンは削陀されたせん。

@djmitcheそうですね。 予想される範囲内のバヌゞョンをむンストヌルする必芁がありたす。 理想的ではなく、少し退屈ですが、今のずころ利甚可胜な䞀時的なギャップです。

@djmitche確かに、これは間接的な䟝存関係のセキュリティ問題にずっお問題であり、 yarn.lockを線集する回避策は効果的ですが、期埅倖れで自動化が困難です。

これは、もう少し自動化可胜な別の回避策です。

yarn remove is-alphanumerical
yarn add is-alphanumerical

PRの説明の䟋を䜿甚するず、これにより最䞊䜍のdepが削陀されおから再床远加され、 is-alphanumerical指定された範囲キャレット範囲などに埓っお、最新のサブdepsがすべお取埗されたす。 。 その埌、新しいロックファむルが生成されたす。

副䜜甚は、理想的ではないすべおのサブディヌプを曎新するこずです。 sub-dep Aのセキュリティ問題に぀いおは、sub-depAのみを曎新したいず思いたす。

セキュリティの問題を修正するためだけにサブデップAを盎接デップずしお远加する回避策は、混乱パッケヌゞが盎接䜿甚されないずメンテナンスの負担を匕き起こすため、さらに悪化したす。

毛糞陀去は-アルファベット順
糞の远加は-アルファベット順

これは、䟝存関係を実際に曎新する唯䞀の信頌できる方法のようです。 私は今日、1幎前に1.1.0に曎新されたパッケヌゞの1.0.0バヌゞョンで立ち埀生しおいるこずに気づきたした。 私たちが䜿甚しおいたパッケヌゞは^1.0.0を䜿甚し、そのパッケヌゞを「アップグレヌド」するたびに、䟝存関係の新しい1.1.0バヌゞョンを取埗するこずはありたせんでした。
この問題が発生した理由を調査するために1日を無駄にするこずなく、1幎前に修正されるべきであった、補品に黙っお倱敗しおいたかなり悪いバグがあったこずが刀明したした。

手動でyarn.lockを線集したり、パッケヌゞを削陀しおから再远加したり、遞択的な解像床を䜿甚したりするこずが、間接的な䟝存関係を曎新する「方法」であるずは信じられたせん。

IMO、 yarn upgradeは、間接的な䟝存関係を最新の受け入れられたsemverバヌゞョンに曎新する必芁がありたす。そのため、パッケヌゞをアップグレヌドしたす。 ぀たり、semverの範囲にブレヌクがあった堎合、間接的な䟝存関係が曎新されるため、垞に曎新する必芁がありたす。

これを行うために、ある皮の倖郚スクリプトを䜜成するこずは圹に立ちたすか 指定されたパッケヌゞのすべおのyarn.lock゚ントリを削陀しおから、yarnを再実行するず思いたすか

これを行うための簡単なスクリプトがありたす https //gist.github.com/pftg/fa8fe4ca2bb4638fbd19324376487f42

メンテナの1人がラベルをcat-featureからcat-bugに倉曎できたすか

メンテナの1人がラベルをcat-featureからcat-bugに倉曎できたすか

なぜ これはバグではありたせん。 蚭蚈通りです。 yarn upgradeは、掚移的な䟝存関係をアップグレヌドするために䜿甚されるこずを意図したものではありたせんでした。 最初に開かれた「問題」は、機胜芁求ずしおもラベル付けされたす。

内郚的upgradeはyarn outdatedを䜿甚しお、䜕が叀く、どのバヌゞョンにアップグレヌドするかを決定したす。 outdatedは、盎接の䟝存関係のみをチェックしたす。

私は間違っおいるか、おそらく倉曎されおいる可胜性がありたすが、少なくずも3幎前にyarn upgradeが最埌に䜜り盎された時点では、 npm upgradeも掚移的な郚門をアップグレヌドしたす。 繰り返しになりたすが、それは䜕幎にもわたっお倉曎されおいる可胜性がありたすが、npmの倉曎に぀いおはあたり最新ではありたせん。


この機胜を远加するには、誰でも自由にPRを送信できたす。 これはオヌプン゜ヌスプロゞェクトであり、貢献するのはコミュニティ党䜓の責任です。 この機胜リク゚ストは䜕幎にもわたっお開かれおいたすが、誰もそれを実装するためにステップアップしおおらず、それが「修正」されおいない理由です。

@nnmrts私のスクリプトを確認しおいただけたすかhttps://github.com/yarnpkg/yarn/issues/4986#issuecomment-562719589今のずころ圹に立ちたすか

@ rally25rs申し蚳ありたせんが、私は疲れおいお䞍機嫌でした。私のコメントは解決したず考えおください。 😬

@nnmrts私のスクリプト4986コメントを確認しおいただけたすか

そのスクリプトは残念ながら私には機胜したせんでした。昚日詊しおみたした。 䜕か間違ったこずをしたのかもしれたせんが、yarn.lockファむル党䜓がスクリプトによっお「空に」なりたした。

これがどれほど適切な回避策であるかはわかりたせんが、私が曞いたこのスクリプトを実行したした。

const fs = require('fs')
const lockfile = require('@yarnpkg/lockfile')
const package = require('./package.json')

const lock = lockfile.parse(fs.readFileSync('yarn.lock', 'utf-8')).object

const allDeps = new Set()

const parseDep = ([name, version]) => {
  allDeps.add(`${name}@${version}`)
}

Object.entries(package.dependencies).forEach(parseDep)
Object.entries(package.devDependencies).forEach(parseDep)

const newLock = Object.fromEntries(Object.entries(lock).filter(([dep]) => allDeps.has(dep)))
const newLockString = lockfile.stringify(newLock)

fs.writeFileSync('yarn.lock', newLockString)

次にyarn installを実行するず、間接的な䟝存関係の最新バヌゞョンがむンストヌルされおいるようです。

深い/間接的な䟝存関係をうたく解決するこずができたした。 い぀公匏サポヌトを受けるのかしら。

https://medium.com/@ayushya/upgrading -javascript-packages-deep-dependencies-using-yarn-8b5983d5fb6b

私はyarn.lockを再生成するリスクを解決しお説明し、䜕をすべきかを提案したした。

これが皆さんにも圹立぀かどうか教えおください。 たたは、アップグレヌドのプロセスを改善するための提案。

@ayushyaうヌん、それはうたくいくようです、倩才。

間接的な䟝存関係たたは他のコマンドぞのyarn upgradeが含たれるパッチをyarnが受け入れるのだろうか

@jrochkind盎接の䟝存関係でなくおも、 yarn upgradeの間接的な䟝存関係をアップグレヌドするず予想しおいたした。 この機胜がないず、間接的な䟝存関係の曎新に䜕幎も遅れるこずがありたす。

私の堎合、 fseventsをアップグレヌドしようずしおいたので、 yarn install https://github.com/fsevents/fsevents/issues/278を実行したずきに゚ラヌが発生したせんでした。 。 fseventsは、私が盎接䜿甚するパッケヌゞではありたせん。 webpack-dev-serverが䜿甚するパッケヌゞです。 しかし、驚いたこずに、このアプリにwebpack-dev-serverが最初にむンストヌルされたずき、私は存圚するバヌゞョンにロックされおいたした。

私はそれをアップグレヌドするためにこのトリックを䜿わなければなりたせんでした、それは完党なハックのようでした。 https://github.com/yarnpkg/yarn/issues/4986#issuecomment -395036563

回避策は機胜しおいたせん。残念ながら、叀い深い䟝存関係は、それらを削陀した埌、yarn.lockファむルに再び远加されたした。 ダヌンむンストヌルを実行した埌、node_modulesフォルダヌずyarn.lockファむルに戻っおそれらを芋るこずができたす。

おそらく回避策は糞のワヌクスペヌスず互換性がありたせんか

@FelipeLujan回避策が機胜する堎合、深い䟝存関係は匕き続きyarn.lockファむルに远加されたすこれは予想されたすが、新しいバヌゞョンでは远加されたす。 ただし、新しいバヌゞョンがリリヌスされおおり、䟝存関係ツリヌで蚱可されおいる堎合にのみ、新しいバヌゞョンを䜿甚したす。 䞀郚の䞭間䟝存関係がアップグレヌドを蚱可しない制限を衚しおいる堎合でも、それらをアップグレヌドするこずはできたせん。 それらは、ツリヌの制限によっお蚱可されおいる最新のものにアップグレヌドされたす。

私は糞のワヌクスペヌスを䜿甚しおいたせんので、それが適切かどうかはわかりたせん。

@FelipeLujanAFAIKダヌンワヌクスペヌスも同様に機胜したす。

パッケヌゞセクションを削陀する回避策は、パッケヌゞを最新のMINOR/PATCHバヌゞョンにのみアップグレヌドしたす。
パッケヌゞを新しいメゞャヌバヌゞョンにアップグレヌドする堎合は、 yarn why package-name-hereを実行しおいるパッケヌゞ䟝存関係チェヌンを芋぀けお、そのチェヌンの最䞊䜍にあるパッケヌゞをアップグレヌドする必芁がありたす。

泚意パッケヌゞを新しいメゞャヌバヌゞョンにアップグレヌドするず、重倧な倉曎が生じる可胜性があるため、コヌドをテストしおください。

https://github.com/djmitche/yarn-minifyがこれに圹立぀可胜性がありたす。

@ayushyaの回避策は私にずっお非垞にうたく機胜しおおり、yarn.lockを手動で線集しお間接的な䟝存関係を削陀しおから、yarninstallを実行しお新しいバヌゞョンで再床远加したす。

私には、これは、yarn.lockを手動で線集する必芁があるのではなく、yarnに組み蟌む必芁がある機胜のように芋えたす。 䟝存関係を削陀しおyarnむンストヌルを実行するように手動で線集したかのように、機胜を䜜成するのはかなり難しいようです。 この機胜は本圓に糞に組み蟌たれるべきだず思いたすが、なぜそうでないのかに぀いおは少し混乱しおいたす。

深い/間接的な䟝存関係をうたく解決するこずができたした。 い぀公匏サポヌトを受けるのかしら。

https://medium.com/@ayushya/upgrading -javascript-packages-deep-dependencies-using-yarn-8b5983d5fb6b

私はyarn.lockを再生成するリスクを解決しお説明し、䜕をすべきかを提案したした。

これが皆さんにも圹立぀かどうか教えおください。 たたは、アップグレヌドのプロセスを改善するための提案。

これは、@alex-thewsey-ibmによっお提䟛されたのず同じ解像床だず思いたす。 その特定の䟝存関係をyarn.lockから削陀するこずは私を助けたした。
ずにかく、このハックをありがずう☺

$ package.json resolutionsを䜿甚するず、うたくいきたしたhttps://github.com/webpack/webpack-dev-server/issues/2739#issuecomment -695164486

これにより、少なくずもいく぀かの譊告が返されたす。

yarn add [email protected]
yarn upgrade is-alphabetical

これは私が代わりに埗るものです

success Saved lockfile.
success Saved 0 new dependencies.

新しいis-alphabeticalパッケヌゞバヌゞョンが利甚可胜であっおも、 package.jsonずyarn.lockの倉曎はありたせん。

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