独学者Fossa

独学していることなど

Composer Local Package

Composer
Composer

記事のタイトルだけ見ると、すごく、ありふれた内容だと思います。*1

今までのやり方

今までは、ローカルパッケージをインストールする時、下記の通りでした。

  1. composer.jsonに、直接、repositoriesrequireを記述する
  2. composer install or composer 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
前述だと、ローカルパッケージの追加が出来ず、一つしかインストール出来ません。


いくつか、ローカルパッケージをインストールしたい場合は、下記の通りです。

  1. composer.jsonに今まで通り、repositoriesを追加します。
  2. 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:英語だと、いくつか同じような記事があるけど、日本語は、どうかな?