一、初始化(生成composer.json文件)
composer init
#輸入你要創建的composer包項目命名空間
Package name (<vendor>/<name>) [root/tiny-laravel]:?#haveyb/tiny-laravel
#輸入composer包的描述
Description []:#this is a tiny laravel haveyb
#輸入作者信息。前面是作者名稱,后面用<>包住郵箱地址
Author [, n to skip]:?#haveyb <haveyb@163.com>
#輸入版本穩定性,stable, RC, beta, alpha, dev
Minimum Stability []:?#dev
#填寫項目類型
Package Type (e.g. library, project, metapackage, composer-plugin) []:#library
#填寫授權類型
License []:?#MIT
#填寫依賴信息,如果有需要依賴的包,則填寫在這里,沒有就直接回車。如果需要多個,則重復以上兩個步驟
Define your dependencies.Would you like to define your dependencies (require) interactively [yes]?#示例:
Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package: php
Enter the version constraint to require (or leave blank to use the latest version): >=7.1.3#如果還有其他依賴,則繼續填寫,否則直接回車
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{"name": "haveyb/tiny-laravel","description": "this is a tiny laravel haveyb","type": "library","require": {"php": ">=7.1.3"},"license": "MIT","authors": [{"name": "haveyb","email": "haveyb@163.com"}],"minimum-stability": "dev"
}
Do you confirm generation [yes]? yes
#是否現在安裝依賴
Would you like to install dependencies now [yes]? no
配置psr-4自動加載
#在composer.json中添加如下代碼
"autoload":{"psr-4":{"haveyb\\TinyLaravel\\":"./src/"}
},
?
添加上面代碼后的composer.json文件
{"name": "haveyb/tiny-laravel","description": "this is a tiny laravel haveyb","type": "library","require": {"php": ">=7.1"},"license": "MIT","authors": [{"name": "haveyb","email": "haveyb@163.com"}],"minimum-stability": "dev","autoload":{"psr-4":{"haveyb\\TinyLaravel\\":"./src/"}}
}
生成自動加載文件
composer update#也可以使用composer install命令,只不過composer update更常用
執行該命令后,就會發現,目錄下生成了一些文件,這些文件就是自動加載所用的文件,如圖:
?
?
二、開發composer包并測試
?
1、創建目錄結構
在包目錄下創建src目錄,我這里的包目錄是在 /data/tiny-laravel
cd /data/tiny-laravel
mkdir src
cd src
mkdir database
touch MySQL.php
?2、向 MySQL.php 文件添加如下測試內容
?
<?php
declare(strict_types = 1);
namespace haveyb\TinyLaravel\database;class MySQL
{/*** 測試用例** @return string* @author cyf*/public function getDatabase() : string{return 'this is get database function';}
}
3、在項目中實例化這個類,并訪問這個方法,如果成功,說明composer包開發成功,之后根據需求定制開發即可。
我這里為了方便,直接在網站根目錄訪問的index.php。
index.php
<?php
require './vendor/autoload.php';
use haveyb\TinyLaravel\database\MySQL;$mysql = new MySQL();
echo $mysql->getDatabase();
結果是this is get database function,說明定義并加載成功,之后可以根據需求定制開發,然后在項目中實例化后引用相應方法即可。
?
注意:如果出錯,著重檢查命名空間和引入是否正確和規范。
?4、結語
現在,我們可以開始定制開發了,就像我們使用的阿里巴巴的 oss composer包一樣。
具體包的加載過程,這里不細說,不過有一個文件,大家應該要知道,位于 tiny-laravel/vendor/composer/autoload_psr4.php。
它長這個樣子:
<?php// autoload_psr4.php @generated by Composer$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);return array('haveyb\\TinyLaravel\\' => array($baseDir . '/src'),'yii\\gii\\' => array($vendorDir . '/yiisoft/yii2-gii/src'),
);
三、發布composer到packagist