記事のタイトルだけ見ると、すごく、ありふれた内容だと思います。*1
今までのやり方
今までは、ローカルパッケージをインストールする時、下記の通りでした。
composer.json
に、直接、repositories
とrequire
を記述するcomposer install
orcomposer update
ローカルパッケージでも、composer require <local_package>
が、出来ました。
使用したバージョン
Name | Version |
---|---|
PHP | v7.4.15 |
Composer | v2.0.11 |
ファイル構造
. ├── example │ <省略> │ ├── composer.json │ <省略> └── packages └── fossa └── foo └── composer.json
example
の中身は、例えば、laravel new example
したとします。
ローカルパッケージで、fossa/foo
を作成したとします。
試してみましょう
手順1
example
フォルダ内で、下記のコマンドを実行します。
composer config repositories.local path "../packages/fossa/foo"
手順2
手順1と同じく、example
フォルダ内で、下記のコマンドを実行します。
composer require fossa/foo
実行結果
Using version dev-master for fossa/foo ./composer.json has been updated Running composer update fossa/foo Loading composer repositories with package information Updating dependencies Lock file operations: 2 installs, 0 updates, 0 removals - Locking fossa/foo (dev-master) - Locking laravel-lang/lang (8.0.3) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Downloading laravel-lang/lang (8.0.3) - Installing laravel-lang/lang (8.0.3): Extracting archive - Installing fossa/foo (dev-master): Symlinking from ../packages/fossa/foo
fossa/foo
の中で、laravel-lang/lang
を使っているので、laravel-lang/lang
も、インストールされています。
composer.jsonの例(部分のみ)
"require": { "php": "^7.3|^8.0", "fossa/foo": "dev-master", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", "laravel/framework": "^8.12", "laravel/tinker": "^2.5" }, "repositories": { "local": { "type": "path", "url": "../packages/fossa/foo" } }
しかし
Info
前述だと、ローカルパッケージの追加が出来ず、一つしかインストール出来ません。
いくつか、ローカルパッケージをインストールしたい場合は、下記の通りです。
composer.json
に今まで通り、repositories
を追加します。composer require <local_package>
composer.jsonの一部分
"repositories": [ { "type": "path", "url": "../packages/fossa/foo" }, { "type": "path", "url": "../packages/fossa/bar" }, { "type": "path", "url": "../packages/fossa/baz" } ]
*1:英語だと、いくつか同じような記事があるけど、日本語は、どうかな?