2017年9月3日 星期日

[PHP] 使用 composer 管理自行開發中的套件

使用 composer 管理 php 套件, 遇到要自行開發的套件, 又不想上傳到 github 公開,  也不想自建一個 repo 那麼麻煩時, 可以透過以下方式進行.

假設環境如下:
  1. 網站根目錄為  /var/www/mysite
  2. 自行開發套件的路徑為  /var/www/mypackage
  3.  套件名稱為 duan/firstpackage
  4.  一個名稱為 mylog 的 class
[更新] :
原本設定方式還是要透過 git 方式來加入自己開發的套件, 而不是直接使用本機 (local file) 上的套件檔案.
正確做法應該是將 compoeser 裡的 repo 設定改為 path , 這樣就可以加上 symlink 參數, 產生 symbolic link. 這樣直接修改套件內容就會直接產生效果, 對於開發中的套件會方便許多. (原本方式要在修改後更新到 git , 然後在引用套件的地方跑一次 composer update 才會從 git 取出來更新 vendor 下的套件檔案).

[修正後的 composer.json 內容]
更新 compoer.json 的內容如下 (只列出 repo 的部份, 其它照舊)

"repositories": [{
    "type": "path",
    "url": "/var/www/piiplib/piiplib",
    "options": {
        "symlink": true
    }   
}]
[修正前的流程]

處理流程大致如下
1. 到 /var/www/mypackage 建立 composer.json (例如用 composer init )
    然後修改內容大致如下 (以 follow PSR 4.0 來說)

{
    "name": "duan/firstpacakge",
    "description": "my first pacakge",
    "license": "MIT",
    "authors": [
     {
           "name": "duan",
           "email": "duan@example.com"
     }
     ],
    "require": {},
    "require-dev": { },
    "autoload": {
        "psr-4": {"Duan\\Firstpackage\\": "src"}
    }
}


2. 在 /var/www/mypackage 建立以下路徑  src tests 後, 執行 composer update

3. 在 /var/www/mypackage/src 下建立檔案 Mylog.php
    namespace 為 Duan\Firstpackage


4. 對  /var/www/mypackage 做套件管理 (git)
a.  git init
b.  edit .gitignore , 加入  /vendor 和 composer.lock
c.  git add .
d.  git commit -a -m "some description"

5. 到 /var/www/mysite 下, 在 composer.json 加入以下內容

 "require": {
     "duan/firstpackage": "dev-master"
  }
 "repositories": [{
     "type": "vcs",
     "url": "/var/www/mypackage",
 }]
6. 在 /var/www/mysite 執行 composer update


沒錯誤的話, 在 /var/www/mysite/vendor/  裡, 應該會複製了一份  /var/www/mypackage commit 在 git 裡的內容到   /var/www/mysite/vendor/duan/firstpackage 路徑下

這時候要使用時, 依 composer autoload 的方式就可以使用了, 例如

require_once "/var/www/mysite/vendor/autoload.php";
use Duan\Firstpackage\Mylog;
$log = new Mylog;


參考資料
http://culttt.com/2014/05/07/create-psr-4-php-package/

沒有留言: