ローカルストレージのファイルをComposerのリポジトリとして指定する

gitなどで管理するまでもない雑多なライブラリをComposerで取り込みたい。


呼び出される側の設定



Composerで取り込むプログラム側。
こちらを参考にさせていただきました。
Composer が PSR-4 に対応していた


・my_library/src/Sample.php


  1. <?php
  2. namespace Symfoware\\Example;
  3. class Sample {
  4.     
  5.     public function say() {
  6.         return "Hello, World!";
  7.     }
  8. }




・my_library/composer.json


  1. {
  2.     "name": "symfoware/mylib",
  3.     "license": "MIT",
  4.     "autoload": {
  5.         "psr-4": {
  6.             "Symfoware\\Example\\": "src/"
  7.         }
  8.     }
  9. }




ここの「name」で指定した名前「symfoware/mylib」で、requireすることになります。





呼び出し側の指定



ポイントは2つ。

repositoriesにtype:pathでcomposer.jsonへのパスを指定すること。
https://getcomposer.org/doc/05-repositories.md#path


requireのバージョンには「*@dev」と指定しておくこと。
ここの指定が「*」だとエラーになります。


Problem 1
    - The requested package symfoware/mylib could not be found in any version, there may be a typo in the package name.

Potential causes:
- A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting
see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.




これの意味がわからなくて苦しみました。
ここを見て解決。
phpdocumentorのcomposer install時のエラー解消


・composer.json


  1. {
  2.     "repositories": [
  3.         {
  4.             "type": "path",
  5.             "url": "./my_library"
  6.             
  7.         }
  8.     ],
  9.     "require": {
  10.         "symfoware/mylib": "*@dev"
  11.     }
  12. }





最終的にテストした時の階層はこんな感じになります。

674_01.png


インストールを実行


$ composer install




想定通り、vendorフォルダへ資産が配置されました。

674_02.png





読み込まれる側でバージョン指定



ライブラリ側のcomposer.jsonでバージョンを指定しておけば


  1. {
  2.     "name": "symfoware/mylib",
  3.     "license": "MIT",
  4.     "version":"0.1",
  5.     "autoload": {
  6.         "psr-4": {
  7.             "Symfoware\\Example\\": "src/"
  8.         }
  9.     }
  10. }




呼び出し側の指定を「*」としてもOKでした。


  1. {
  2.     "repositories": [
  3.         {
  4.             "type": "path",
  5.             "url": "./my_library"
  6.             
  7.         }
  8.     ],
  9.     "require": {
  10.         "symfoware/mylib": "*"
  11.     }
  12. }



こちらの方が良さそうです。





リンクではなくコピー



上記の指定だと、ライブラリのファイルのコピーではなく、ライブラリのパスに対しての
リンクが設定されました。

symlink:falseを指定することで、リンクではなくコピーになります。


  1. {
  2.     "repositories": [
  3.         {
  4.             "type": "path",
  5.             "url": "./my_library",
  6.             "options" : {
  7.                 "symlink": false
  8.             }
  9.         }
  10.     ],
  11.     "require": {
  12.         "symfoware/mylib": "*"
  13.     }
  14. }




関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ