专栏名称: tlanyan
目录
相关文章推荐
中科院物理所  ·  改善高端量子设备的秘诀,竟然是放两颗葡萄 ·  20 小时前  
中科院物理所  ·  为什么电磁炉能把火锅加热,但人手放上去不烫? ·  2 天前  
中科院物理所  ·  出生日期覆盖1-9所有数字的概率很小吗?莫非 ... ·  3 天前  
51好读  ›  专栏  ›  tlanyan

PHP回顾之创建自己的Composer包

tlanyan  · 掘金  ·  · 2018-04-07 14:03

正文

PHP回顾之创建自己的Composer包

转载请注明文章出处: tlanyan.me/php-review-…

PHP回顾系列目录

前文 PHP回顾之Composer 简要介绍了Composer的相关概念和简要用法,应付日常开发已无大碍。想要更好的利用Composer协同工作,学会创建自己的Composer包是一项必不可少的技能。本文先讲解Composer仓库的概念,再给出创建和发布Composer包的步骤。

仓库(Repository)

仓库是软件开发中常见的概念,与源(sources)意义相近,主要指托管资源的场所。许多软件都有仓库的概念,例如yum、npm、maven、Git,以及本文的主角Composer。仓库以中心化的方式托管资源,为软件的正常工作提供保障。

Packagist 是Composer默认的中央仓库,PHP社区的绝大部分Composer包都托管在该网站上。Packagist提供公开的、免费的托管服务,任何人均可注册、自由发布包,无需审核。Packagist由Private Packagist提供托管和维护,两者的主要区别为:Packagist的官网是 packagist.org ,托管开源代码,面向公众提供免费包托管服务;Private Packagist的官网是 packagist.com ,托管的代码无需开源,仓库服务器可位于内网,提供更快、更高效的包代码托管服务。

可以配置多个仓库,Composer会自动找出最适合项目的依赖包。搜索包的流程如下:首先检查当前项目是否配置额外仓库,有则优先在额外仓库中检索;无结果向上到全局配置中的额外仓库检索;未配置或搜索无结果的情况下,回退到默认的Packagist中央仓库检索。除非禁用了默认的仓库,Packagist中的包总会被检索到。因为这个原因,Composer推荐PHP开发人员将包托管在Packagist网站上,方便他人检索和引用。

配置仓库

有两种方法对Composer的仓库进行配置:命令行和编辑配置文件。 composer config 是Composer配置的命令,可以用来配置项目或全局的仓库信息,例如:

composer config [-g] repo.packagist composer https://packagist.phpcomposer.com

第二种方法是编辑配置文件。编辑项目的 composer.json ~/.config/composer/config.json ,增加 repositories 一项配置,例如:

"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}

以上配置使用 Packagist中国全量镜像 网站作为默认中央仓库。在大陆地区部署PHP项目,建议使用该仓库目录,能加速依赖包的下载。

仓库配置最重要的两个参数是 type url type 指明仓库的类型, url 则指向具体网址。根据仓库的位置,常用的 type 可选值有:

  1. composer,Composer包托管仓库,例如 Packagist中国全量镜像
  2. vcs,版本控制管理系统,例如Github上的项目地址;
  3. pear,PEAR上的包;
  4. package,位于互联网上包;
  5. artifact,代码zip包合集;
  6. path,指向代码具体位置。

互联网上的仓库, type 的常见值是 composer vcs ;本地的项目,常见值是 artifact path 。具体用例,可参考Composer官方文档。

掌握了仓库的概念和其配置,接下来我们创建自己的包。

创建自己的Composer包

创建一个Composer包只需两步:1. 填写包描述信息;2. 写代码。本文创建一个 hello-composer 的包来演示创建过程。该包功能只有一个:输出字符串“ Hello, Composer! ”。

Composer包的描述信息存放在 composer.json 文件中,可直接新建(或从其他项目拷贝) composer.json 文件,手动填充必要的字段信息;也可以用 composer init 命令,交互式的输入包信息,生成 composer.json 文件后再补全其他字段信息。我们采取直接编辑文件的方式,在 composer.json 中输入如下内容:

{
    "name": "tlanyan/hello-composer",
    "description": "Hello, Composer!",
    "type": "library",
    "require": {
        "php": ">=7.0"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "tlanyan",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "stable",
    "autoload": {
        "psr-4": {
            "tlanyan\\": "src/"
        }
    }
}

以上内容基本上是一个Composer包的必备字段。其他字段可参考Composer官网的 composer.json说明 。需注意标记为 root-only 的字段, root-only 表示当前包为主项目时才生效。例如 require-dev 字段,在当前项目中开发,字段内的包会下载放到 vendor 文件夹内;如果该项目被其他项目引用,则该字段的值被忽略,引用的包不会被下载。

接下来编写代码。在 src 目录下新建 HelloComposer.php

namespace tlanyan;

class HelloComposer
{
    public static function greet()
    {
        echo "Hello, Composer!", PHP_EOL;
    }
}

代码风格建议参考 PSR-2规范 ,文件命名和路径规范建议参考 PSR-4规范 。另外需注意文件的路径需与 composer.json autoload 的值相匹配。

通过简单两步,我们创建的自己的Composer包。接下来在其他项目中引用该包。

引用Composer包

新建一个test项目,引用上文创建的包并查看效果,步骤如下:

  1. 新建test文件夹,拷贝或者新建 composer.json 文件,配置如下:

    {
        ....
        "require"






请到「今天看啥」查看全文