如何制作一个composer包

为了提高代码的复用率,我们可以把一些常用的代码提取出来,形成一个composer包,这样其他的程序在使用的时候,只需要composer一下即可。

温馨提示:以下操作是基于已经安装完成composer和git之后进行的。

1.新建一个文件夹作为包文件夹,然后执行composer init命令,根据命令提示,完成composer.json,命令会让你填写包名称,描述,是否添加作者,用途,许可证等,当然,你也可以复用其他的的包的composer.json来改改。

2.新建README.md和LICENSE,README和许可证基本是GitHub上必不可少的,根据实际情况填写。

3.新建src文件夹,在里面书写一个简单的类文件。

4.composer.json添加autoload,为自动加载做准备。

{
    "name": "b7442358/mypackage",
    "description": "this is second package",
    "type": "library",
    "license": "Apache-2.0",
    "require": {},
    "autoload":{
        "psr-4": {
            "b7442358\\mypackage\\": "src/"
        }
    }
}

之所以加这个,是为了方便包可以直接使用

use b7442358\mypackage\Mypackage

如果不加,上述方法不能正确引入包文件。

5.目录结构大致如下

src
----Mypackage.php
composer.json
LICENSE
README.md

以上,一个简单的包就制作完成了。
6.初始化git并添加保存。

git init
git add .
git commit -m ""

7.GitHub上新建一个空仓,然后和本地仓对接(如果使用SSH记得在GitHub上添加SSH公钥)

git remote add origin 远程地址
git push -u origin master

8.本地添加tag,并推送到远程

git tag v1.0
git push origin --tags

tag的推送并不能随着git push origin master进行,我们需要单独推动tag到GitHub。

9.添加包到 packagist.org

我们需要打开这个网址,然后登陆,选择GitHub登陆,这样不需要再设置仓库的Webhooks来同步Github的更新,但是选择登陆之后好像又让创建了一个账号密码,设置了一个一样的,暂未知何意,以后再登录选择GitHub并未再次出现,并未深究。完成登录后,我们点击Submit,把刚才完成的包的GitHub地址填入,然后提交,首次提交好像有一个授权,具体什么没仔细留意,点击继续即可。完成提交到收录需要时间,测试了下大概需要20-30分钟左右,你的包就已经在packagist.org出现了(只要通过搜索能搜索出来,证明已经通过了),当然此时包只是在 packagist.org 上,但是我们平时使用的都是国内镜像,国内镜像同步有延迟,我们composer选择 packagist.laravel-china.org,延迟仅5分钟。

10.当国内镜像中也存在我们上传的包的时候,我们就可以使用composer require来引入我们的包了。

composer require b7442358/mypackage

然后使用

use b7442358\mypackage\Mypackage

接着就跟使用其他包一样了。

  1. 删除tag
git tag -d v1.0
git push origin :refs/tags/v1.0

删除GitHub上的tag的时候,packagist.org并不能同步删除(即使做了自动同步),需要手动删除(详见特别说明第三条)。

特别说明

1.为什么要新建src?
一来是因为很多包都是这么做的,二来如果不新建autoload的时候psr4后面就为空,是否会造成问题暂未测试
2.作为composer的包必须打tag,没有tag的话,composer是无法使用的。
3.添加到packagist.org的包虽然git tag更新的时候,可以同步更新,但是如果删除tag的话,是无法同步删除的,但是同一个tag的话,新的内容会自动替换老的内容。例如你原来有tag1.0已经推送到了packagist.org,但是你本地删除了这个1.0,Github上也删除了,但是packagist.org不会删除。如果你重新定义一个tag1.0,并重新推送到GitHub上,此时packagist.org会使用新的tag1.0覆盖旧的tag1.0。

你可能感兴趣的:(php,git,composer)