运用composer开发自定义包(基于git)

在项目研发时,很多时候不是简单的一个项目在运行着,比如你研发一个电商系统,那么必然有客户端,必然有后台,根据业务可能还有物流系统等等。这些项目中基本都会用到一些公共的组件,比如推送、短信、搜索、队列以及数据库模型等。要是每个项目都单独写一套,那么后期维护就显得力不从心了,所以采用公共组件或者服务的形式,多个项目直接引用就方便多了。
本人文笔不是很好,所以下面就直接上干货了。

  1. 首先登录你的github账号,如果没有注册,那么先去注册了吧。然后新建一个项目,项目名字可以任意取也可以和我的名字一样pack-test(反正都是测试)。

2.把github上的pack-test拉取到本地,如下图

运用composer开发自定义包(基于git)_第1张图片
[TGFR4{O6KU~Y_[_DY]]QUO.png

3.因为是基于自动加载机制,接下来就是composer配置了,首先切换到pack-test目录,然后命令行运行composer init 这个是在当前目录配置composer的意思,然后命令行中会要求输入一些基本配置信息,包括报名、作者、版本等,如果不是很明白这些配置,请移步composer教程,填写完成之后,就直接运行composer install安装即可,环境基本搭建完成,下面贴一个我的图:

运用composer开发自定义包(基于git)_第2张图片
aa.png

4.然后用编辑器开始,啪啦啪啦写代码啦,下面开始划重点了。在下图中我标明了需要修改和添加文件
运用composer开发自定义包(基于git)_第3张图片
bb.png

下面就是相关文件的代码了,同学自己去看吧
Service.php

namespace Pack\Test;
class Service
{
    public function __construct()
    {
    }

    public function hello()
    {
        return 'hello world!!';
    }
}

test.php

require_once __DIR__ . '/vendor/autoload.php';
use Pack\Test\Service;

$obj = new Service();

$msg = $obj->hello();
var_dump($msg);

composer.json

{
    "name": "pack/test",
    "description": "pack test",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "brucelli",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "stable",
    "autoload": {
        "psr-4": {
            "Pack\\Test\\": "src/"
        }
    },
    "require": {}
}

autoload_psr4.php

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Pack\\Test\\' => array($baseDir . '/src'),
);

autoload_static.php

namespace Composer\Autoload;

class ComposerStaticInitda0d8c2657ac15f2ea7ec7835540a0dd
{

    public static $prefixLengthsPsr4 = array (
        'P' =>
            array (
                'Pack\\Test\\' => 10,
            ),
    );

    public static $prefixDirsPsr4 = array (
        'Pack\\Test\\' =>
            array (
                0 => __DIR__ . '/../..' . '/src',
            ),
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInitda0d8c2657ac15f2ea7ec7835540a0dd::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInitda0d8c2657ac15f2ea7ec7835540a0dd::$prefixDirsPsr4;
        }, null, ClassLoader::class);
    }
}

因为只是测试,所以代码很少,直接运行test.php php test.php,出现如下结果:

cc.png

5.将代码提交到github,然后将这个包引入项目,这里我以YII2为例子,首先在项目的composer.json中的require中添加需要引入的包,前面的pack/test是前面定义的包名,后面的dev-master指的的master分支

运用composer开发自定义包(基于git)_第4张图片
dd.png

6.指定自定义包的引入地址,如下图

运用composer开发自定义包(基于git)_第5张图片
ee.png

7.更新指定的包,即更新测试包

运用composer开发自定义包(基于git)_第6张图片
ff.png

8.就是测试项目中包能否运行了,在YII2中添加命令行

HelloController.php

namespace app\commands;

use yii\console\Controller;
use yii\console\ExitCode;
use Pack\Test\Service;

/**
 * This command echoes the first argument that you have entered.
 *
 * This command is provided as an example for you to learn how to create console commands.
 *
 * @author Qiang Xue 
 * @since 2.0
 */
class HelloController extends Controller
{
    /**
     * This command echoes what you have entered as the message.
     * @param string $message the message to be echoed.
     * @return int Exit code
     */
    public function actionIndex($message = 'hello world')
    {
        echo $message . "\n";

        return ExitCode::OK;
    }

    public function actionPack()
    {
        $obj = new Service();
        $msg = $obj->hello();
        echo $msg;
        return ExitCode::OK;
    }
}

最后的最后在命令行运行代码php yii hello/pack,不出意外,看到如图结果。

kk.png

恭喜你又学会了一个神奇的操作。感谢同学的细心阅读,有缘江湖再见了。

你可能感兴趣的:(运用composer开发自定义包(基于git))