独学者Fossa

独学していることなど

Composer Local Package

Composer
Composer

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

参考にした記事

laravel-news.com

使用したバージョン

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 '{"type": "path", "url": "../packages/fossa/foo"}' --file composer.json

手順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-main",
        "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 update

composer.jsonの一部

    "require": {
        "fossa/foo": "dev-main",
        "fossa/bar": "dev-main",
        "fossa/baz": "dev-main",
    },
    "repositories": [
        {
            "type": "path",
            "url": "../packages/fossa/foo"
        },
        {
            "type": "path",
            "url": "../packages/fossa/bar"
        },
        {
            "type": "path",
            "url": "../packages/fossa/baz"
        }
    ]

おそらく、Composer v2.1以降だと、下記の記述で良いみたい。

    "require": {
        "fossa/foo": "dev-main",
        "fossa/bar": "dev-main",
        "fossa/baz": "dev-main",
    },
    "repositories": [
        {
            "type": "path",
            "url": "../packages/*"
        }
    ]