提交PHP组件到Packagist 发布自己的Composer包

作者:袖梨 2022-06-24

Composer是PHP的一个依赖管理工具,它使得PHP焕发新的生机,有了现代化的WEB开发规范,Packagist是PHP组件的库,也有其他的镜像。

在Packagist上提交了一个自己开发的PHP组件,这样其他开发者就可以使用Composer使用这个包了。这个组件并没什么功能,主要是看看提交PHP组件的流程,并记录了过程中遇到的问题及解决方法,以供参考。


提交PHP组件步骤:

1.新建一个项目目录,创建一个composer.json文件,格式如下:

PHP

{
    "name": "your-vendor-name/package-name",
    "description": "A short description of what your package does",
    "require": {
        "php": "^5.3.3 || ^7.0",
        "another-vendor/package": "1.*"
    }
}


这个json格式的文件中包含组件的基本信息,这里还差自动加载的方式,要根据具体开发模式指定自动加载方式,这里require可以指定这个组件依赖的其他组件,composer都会自动解决依赖。

附上完整的composer.json内容作为示例:

JavaScript

{
    "name": "tanteng/laravel-page-loaded-time",
    "description": "Display page loaded time",
    "keywords": ["laravel","performance"],
    "homepage": "https://github.com/tanteng/laravel-page-loaded-time",
    "license": "MIT",
    "authors": [
      {
        "name": "tanteng",
        "email": "[email protected]",
        "homepage": "http://www.tanteng.me",
        "role": "Developer"
      }
    ],
    "require": {
        "php": "^5.3.3 || ^7.0",
        "laravel/framework": "~4.0"
    },
    "autoload": {
      "psr-4": { "Loading\": "" }
    }
}

2.开发组件功能

要注意遵循psr规范,使用命名空间。

3.把组件提交到Github上

提交组件到Packagist之前需要先把代码提交到github上,在Packagist只需填写组件的github地址。

4.提交组件地址到Packagist

这样就完成的PHP组件提交到Packagist的过程,具体请参见Packagist官网。

问题:使用composer require找不到组件

组件提交到Packagist上,提示发布成功了,但是使用composer命令却找不到组件:

PHP

composer require tanteng/laravel-page-loaded-time

如图:

composer-not-found

由于我的composer使用的国内镜像,猜测可能是没有同步的原因,使用这个命令把“源”改回去还是不行。

PHP

composer config -g repo.packagist composer https://packagist.org

原来我的组件还没有在github上发布正式,这个时候还是开发版本dev-master.应该加上dev-master版本。

PHP

composer require tanteng/laravel-page-loaded-time:dev-master

果然指定了dev-master版本可以成功更新组件,但是这样不行,我们要有一个正式版本。

composer-dev-master

github发布版本

进入组件的github主页,找到导航上“releases”,点击进去如图页面,就可以创建一个版本,填写好信息之后即可发布版本。

create_release

按照页面上的提示填写内容,完成后发布。发布版本后,通过composer require发现还是找不到包。

设置自动更新版本

auto-update

原来还要在Github上配置一下自动更新。具体步骤参考:https://packagist.org/about#how-to-update-packages

我直接通过手动的方式发送curl请求来设置,这样还简单一点,不过这样每次发新的版本都需要这样请求一下:

PHP

curl -XPOST -H'content-type:application/json' 'https://packagist.org/api/update-package?username=tanteng&apiToken=secret' -d'{"repository":{"url":"https://github.com/tanteng/laravel-page-loaded-time"}}'

返回{“status”:”success”}表示成功。

再打开https://packagist.org/packages/tanteng/laravel-page-loaded-time,发现已经是正式版本了。

我用的是composer国内镜像,因为众所周知的原因,连代码仓库也要被墙,我服!等了几个小时再试,这个时候镜像同步更新了,再次输入:composer require tanteng/laravel-page-loaded-time,这个时候可以成功更新了。如图,vendor文件夹下也自动装载了依赖的其他组件

相关文章

精彩推荐