Composer 包本地开发
首先我们看一下 Composer 安装包的结构,正常使用的情况下,拿一个安装好Yii )为例子,打开 vendor 目录下的 laravel 会看到以下的结构:
vendor/laravel
├── framework
│ └── src
│ └── Illuminate
│ └── ...
└── tinker
└── src
└── Console
同时看一下 Laravel 项目下的 composer.json 文件的 require 或 require-dev 的依赖包:
{
...,
"require": {
"php": ">=7.0.0",
"fideloper/proxy": "~3.3",
"laravel/framework": "5.5.*",
"laravel/tinker": "~1.0"
},
...
}
由此可以知道目录结构是对应关系的。
创建目录并初始化
当然在初始化创建目录的时候,要注意项目名跟目录结构一致,例如我的新项目叫 jcc/taxi 那么我创建的目录结构应该这样子:
jcc
└── taxi
接着我们需要在 taxi 下进来进一步的开发,当然,在开发前需要先初始化 composer 配置,在 taxi 目录下运行:
composer init
按照指示填写信息即可:
在 texi 目录下会多出 composer.json 文件:
{
"name": "jcc/taxi",
"description": "This is a test.",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "jcc",
"email": "changejian@gmail.com"
}
],
"minimum-stability": "dev",
"require": {}
}
创建开发目录并设置必要信息
一般情况下,我们会创建 2 个目录,一个是 src 用于存放包所有的逻辑代码,一个是 tests 用于存放测试用例:
jcc/taxi
├── src
├── tests
├── README.md
├── composer.json
└── LICENSE
要注意的是,我们需要再 composer.json 设置一下 composer 自动加载配置,在 composer.json 加入:
{
...,
"autoload": {
"psr-4": {
"Jcc\\Taxi\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Jcc\\Taxi\\Tests\\": "tests/"
}
},
...
}
更多可以看一下 Composer 自动加载文档
创建测试包项目
首先,在 jcc 目录下创建一个新的项目,用于测试:
jcc
├── taxi
└── test-taxi
接着初始化 composer 配置,生成 composer.json 文件:
composer init
然后添加 Repositories 项目,有两种方式:
第一种:直接运行命令
composer config repositories.jcc path /Users/jiajianchan/Sites/jcc/taxi
第二种:直接在 composer.json 文件添加:
{
...,
"repositories": {
"jcc": {
"type": "path",
"url": "/Users/jiajianchan/Sites/jcc/taxi"
}
}
}
type 类型为 path,url 为项目的相对路径.
接下来就是添加依赖,同样有两种方式:
Shell:
composer require jcc/taxi:dev-master -vvv
composer.json 中添加:
{
...,
"require": {
"jcc/taxi": "dev-master"
},
...
}
当然要注意版本号,必须在 jcc/taxi 项目中的 composer.json 中设置
minimum-stability
属性,不然在安装包的时候会报找不到版本号的错。
开发以及测试
首先在 jcc/taxi 项目下的 src 中创建 Client.php 文件:
<?php
namespace Jcc\Taxi;
class Client
{
protected $a;
protected $b;
public function __construct(int $a, int $b)
{
$this->a = $a;
$this->b = $b;
}
public function addTogether()
{
return $this->a + $this->b;
}
}
在 jcc/test-taxi 目录下安装一下 jcc/taxi 项目后,添加 test.php 文件:
// 引入 composer 自动加载文件
require __DIR__ . '/vendor/autoload.php'
$client = new Jcc\Taxi\Client(5, 1);
echo $client->addTogether() . "\n";
最后,在 jcc/test-taxi 目录下运行 test.php 文件,即可得出相加的结果:
php test.php
如果你细心点,会发现,jcc/test-taxi 的 vendor 目录下的 jcc/taxi
依赖项目是一个 软连接
。也就是说,你在 jcc/taxi 中的 Client.php
文件添加一个新方法,然后在 jcc/test-taxi 项目中调用即可,不需要重新 composer update 包哦。非常方便。