質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Yarn

Yarnは、Facebook/Exponent/Google/Tildeが開発したJavaScriptのパッケージマネージャ。npmよりもインストールが速く、厳密にモジュールのバージョンを固定できるなど、npmの問題を解決。npmと互換性があり、同じpackage.jsonを使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

1874閲覧

yarn.lockファイルに記載されるサブ依存関係パッケージのバージョン固定方法

just4clarity

総合スコア8

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Yarn

Yarnは、Facebook/Exponent/Google/Tildeが開発したJavaScriptのパッケージマネージャ。npmよりもインストールが速く、厳密にモジュールのバージョンを固定できるなど、npmの問題を解決。npmと互換性があり、同じpackage.jsonを使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/05/21 08:03

編集2020/05/21 08:04

環境

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.jsonresolutions フィールドを追記することで明示的にバージョンを固定することができるようですが、これはパッケージのバグを回避するためなどの緊急手段のように思えるため私の目的とは合致しないと読み取れます。
https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/

yarnの特徴の一つに下記の記述がありますが、

yarn.lock は、どのバージョンの依存関係がパッケージにインストールされているかを保存することで、インストール作業を重ねてもパッケージに一貫性があることを保証します。

サブ依存パッケージのバージョンが変わる可能性があるのならこの一貫性という言葉は出てこないと思います。
私の認識が間違っているのでしょうか? それとも別のオプションを指定することでサブ依存パッケージバージョンも固定できるのでしょうか?

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/05/21 08:17

開発環境で作った yarn.lock を別の環境に持っていって yarn install すれば同じバージョンがインストールされる、以上のことは言ってないと思います。 例えば、a と b がそれぞれ c に依存していて、最初は a しか使ってなかったけど、途中で yarn add b したら c のバージョンが変わるとかそういうことを心配してるのでしょうか?
just4clarity

2020/05/21 08:33 編集

説明不十分でお手数おかけします。 今回のケースですと get-stdin "^5.0.1" と、あるので yarn install をする時期によっては 5.0.1 ではなく 5.0.2 がインストールされる可能性もあるのではないかということです。 そうなるとチーム内での開発環境に若干とはいえ差異が出てしまうことを懸念しております。
guest

回答1

0

ベストアンサー

yarn.lock には、依存パッケージも含めてインストールされた全てのパッケージのバージョンが記録されます。

例えば cowsay の依存パッケージ get-stdin ですが、cowsay の dependencies: の get-stdin "^5.0.1" に基づいてインストールされるわけではなく、別途 get-stdin のエントリができて、その version "5.0.1" に基づいてインストールされるものと認識しています。

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" get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=

投稿2020/05/21 08:43

編集2020/05/21 08:48
hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

just4clarity

2020/05/21 09:18

各エントリの version "x.x.x" までは目が行き届いていませんでした… yarn install では yarn.lock ファイルの更新はされないことから、仰るとおりの認識でお間違いないと思います。納得いたしました。 迅速なご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問