Composerで依存パッケージのcomposer.lockは使われるのか?
rootのcomposer.lock
にバージョンが記載されていれば、composer install
した場合は、その記載バージョンのパッケージがインストールされます。
では、依存パッケージにcomposer.lock
がある場合は、どうなるのでしょう?
確認してみましょう。
現在、Ray.Diにはcomposer.lock
が含まれています。そして、doctrine/annotations
のバージョンがv1.2.1
になっています。
検証方法
まず、フォルダを作成し、rootのcomposer.json
を作成します。
{
"require": {
"ray/di": "~2.0@dev"
},
"minimum-stability": "dev",
"prefer-stable": true
}
composer install
します。
$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing nikic/php-parser (v1.0.2)
Loading from cache
- Installing doctrine/lexer (v1.0)
Loading from cache
- Installing doctrine/annotations (v1.2.3)
Loading from cache
- Installing ray/aop (2.0.0-alpha)
Loading from cache
- Installing ray/di (dev-develop-2 92cd0e3)
Cloning 92cd0e3d1f2feb8dbaaed7350e2f55d5af9a2a96
Writing lock file
Generating autoload files
上記のようにdoctrine/annotations
はv1.2.1
ではなくv1.2.3
がインストールされました。
結論としては、依存パッケージのcomposer.lock
は使われないということになるようです。
ライブラリ(公開するパッケージ)にcomposer.lockを含めるかどうか?
(14:02 追記)
Composerの公式ドキュメントにちゃんと書いてありました。
For your library you may commit the composer.lock file if you want to. This can help your team to always test against the same dependency versions. However, this lock file will not have any effect on other projects that depend on it. It only has an effect on the main project.
-- https://getcomposer.org/doc/02-libraries.md#lock-file
まとめると、
- ライブラリには
composer.lock
を含めたい場合は含めてもいい - そうすれば、そのライブラリの開発チームはいつも同じ依存バージョンを使いテストすることができる(
composer install
すれば) - しかし、そのライブラリを使用するプロジェクト(アプリケーション)には影響しない(上で見たように
composer.lock
は使われないため) composer.lock
はメインプロジェクト(rootにある場合)にしか影響しない
結論としては、composer.lock
は含めても含めなくてもどっちでもいいみたいですね。
関連
Date: 2014/12/30