创建第一个composer

创建第一个composer

熟悉了composer工具之后,很想自己创建一个属于自己的composer包。以下展开介绍以下过程。

基础命令

# 初始化一个composer项目目录,即在根目录下增加composer.json工具
composer init
# 安装相关依赖
composer install 
# 升级相关依赖
composer update
# 清空composer缓存,如果不清楚,则会优先采用缓存内的composer包。
composer clearcache

综上:我在测试过程中,频繁使用到的两个命令,composer clearcachecomposer install。而且是反复删掉vendor目录及composer.lock文件。

创建包

具体代码参见crontab.zip,代码略。主要在与composer.json文件,定义自定义加载之类的。

composer.json文件如下:

{
    "name": "chaofml/crontab",
    "description": "crontab just like Linux crontab",
    "keywords": [
        "chaofml",
        "crontab"
    ],
    "type": "library",
    "autoload": {
        "psr-4": {
            "chaofml\\crontab\\": "src"
        }
    }
}

创建项目,引入未发布的包

这部分,遇到的坎坷比较多,这部分才是我写这篇文件的初衷。困难1:首先是如何定义从哪下载包?困难2:如何解决下载过程中遇到的bug?3、包能安装成功,但是无法找找到类,即无法自动加载。

参见文章: https://docs.phpcomposer.com/05-repositories.html

最终的composer.json

{
    "name": "some/you",
    "description": "dddd",
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "chaofml/crontab",
                "version": "0.1",
                "dist": {
                    "url": "http://localhost:8005/crontab.zip",
                    "type": "zip"
                },
                "autoload":{
                    "psr-4": {
                        "chaofml\\crontab\\": "src"
                    }
                }
            }
        }
    ],
    "config":{
        "secure-http":false
    },
    "require":{
        "chaofml/crontab":"*"
    }
}
  • 针对困难1:

增加repositories

  • 针对困难2:

增加config配置,并允许http传输文件。secure-http此部分。

  • 针对困难3:

增加autoload配置,类似于包内定义的加载模式。

  • package.version

说明版本号,这个会被当作实际的版本号来引用。

  • package。dist

打包说明:可以在代码的根目录打包,zip。这样压缩文件内包含多个文件,也可以在上一级目录。这两种方式都能成功的被识别出来。

  • package.source

通常可以被省略,内容如下:

"source": {
    "url": "http://smarty-php.googlecode.com/svn/",
    "type": "svn",
    "reference": "tags/Smarty_3_1_7/distribution/"
},

示例

具体的例子:crontab-example.zip

在开始之间,创建一个servert,提供安装包的下载地址:如:http://localhost:8005/crontab.zip

解压该示例,然后进入根目录,依次执行:

composer install
php start.php

即可看到效果。

git引用未发布的包

最终的composer.json内容如下:比上面的简单多了。

{
    "name": "some/you",
    "description": "dddd",
    "repositories": [
	{
            "type": "vcs",
            "url":  "https://gitee.com/chaofml/crontab.git"
        }
    ],
    "config":{
        "secure-http":false
    },
    "require":{
        "chaofml/crontab":"dev-master"
    }
}

备注:由于该包已经发布过了,不太确定,到底是官方的库下载的,还是git仓库。

发布包

https://packagist.org/packages/网站上创建一个账号,然后在一个代码仓库上传自己的代码,然后上传即可。整个过程比较简单,略。使用下面命令导入该包。

composer require chaofml/crontab

但是发布后,暂时还没有不能访问。

由于暂时没有版本号,然后会报错:

Could not find a version of package chaofml/crontab matching your minimum-stability (stable). Require it with an explicit version constraint allowing its desired stability.

暂时只能使用下面方式来安装。

composer require chaofml/crontab  dev-master

打标签

后来,在自己的仓库里面创建了标签,然后,就成功了。

顺便说一下,composer的延时大概有2分钟左右。