環境
OS: Window 10
Node.js: v12.16.3
yarn: 1.15.2
概要
yarn add "パッケージ名"
を実行したさいに生成される yarn.lock
ファイルにはインストールしたパッケージの依存パッケージ情報(サブ依存関係)が記載されますが、このサブ依存関係のパッケージのバージョンは固定可能なのでしょうか。
詳細
サンプルとなるパッケージ「cowsay」をインストールする例で説明します。
https://www.npmjs.com/package/cowsay
パッケージ自体は --exact
オプションでバージョン固定が可能ですので付与します。
$ yarn add cowsay --exact
package.json
には下記の通り固定バージョン記載されたことが確認できます。
json
1 ... 2 "dependencies": { 3 "cowsay": "1.4.0" 4 }
と、ここまでは良いのですが、
生成された yarn.lock
ファイルを見ると下記の通りサブ依存関係のパッケージにはキャレットやチルダが付いているため、
インストールタイミングによって、これらサブ依存パッケージのマイナー、パッチバージョンが変わる可能性があるという認識です。
... cowsay@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/cowsay/-/cowsay-1.4.0.tgz#7c74e93d2c42542643135796577c3d7e628ba4ea" integrity sha512-rdg5k5PsHFVJheO/pmE3aDg2rUDDTfPJau6yYkZYlHFktUz+UxbE+IgnUAEyyCyv4noL5ltxXD0gZzmHPCy/9g== dependencies: get-stdin "^5.0.1" optimist "~0.6.1" string-width "~2.1.1" strip-eof "^1.0.0"
yarn公式ドキュメントを確認するかぎり、 package.json
に resolutions
フィールドを追記することで明示的にバージョンを固定することができるようですが、これはパッケージのバグを回避するためなどの緊急手段のように思えるため私の目的とは合致しないと読み取れます。
https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/
yarnの特徴の一つに下記の記述がありますが、
yarn.lock は、どのバージョンの依存関係がパッケージにインストールされているかを保存することで、インストール作業を重ねてもパッケージに一貫性があることを保証します。
サブ依存パッケージのバージョンが変わる可能性があるのならこの一貫性という言葉は出てこないと思います。
私の認識が間違っているのでしょうか? それとも別のオプションを指定することでサブ依存パッケージバージョンも固定できるのでしょうか?
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー