zoukankan      html  css  js  c++  java
  • 发布一个PHP包到Packagist, 然后使用Composer安装

    Composer 能够方便的进行项目的依赖管理,  当我们发布一个包并且希望别人通过Composer安装的时候,

    就需要将包发布到Composer的包仓库Packagist上面. 下面进行详细的说明一下如何进发布.

    一, 注册Github帐号

    这里我们我们拿Github上的项目进行发布.

    注册地址: https://github.com/join

    二, 创建项目

    在Github上创建完成项目后, 开始编辑composer.json文件, 这个文件用来在Packagist上显示信息, 声明项目

    依赖以及项目的描述等信息.

    composer.json 文件详细字段描述可以查看下面的链接.

    https://docs.phpcomposer.com/04-schema.html#minimum-stability

    composer.json 文件通过 composer init 命令创建,  这个命令会一步一步的进行引导完成composer.json的配置

    $ composer init
      Welcome to the Composer config generator  
    This command will guide you through creating your composer.json config.
    # 输入项目名称, 项目名称需要是<vendor>/<name>的格式, vendor是要求具有权限的, 这里的michael别人已经注册过了
    # 所以是不能使用的(如果你能联系到所有人,对方能够帮你加权限) Package name (<vendor>/<name>) [michael/未命名文件夹]: michael/demo # 输入项目描述信息 Description []: this is a demo # 输入作者信息, 需要是 name <email> 格式 Author [******** <**************>, n to skip]: michael <michaelluthor@163.com> # 这里输入dev, 表示最低的稳定版匹配模式 Minimum Stability []: dev # 输入包类型 Package Type (e.g. library, project, metapackage, composer-plugin) []: lib # 输入授权模式, GPL, LGPL, MIT等 License []: mit # 开始配置依赖, 这里以PHPMailer为例: Define your dependencies. # 开始添加 Would you like to define your dependencies (require) interactively [yes]? yes # 搜索包名 Search for a package: phpmailer Found 15 packages matching phpmailer [0] phpmailer/phpmailer [1] swiftmailer/swiftmailer [2] vernes/yiimailer [3] phpmailer/phpmailer [4] msp/smtp [5] zyx/zyx-phpmailer [6] yuan1994/tp-mailer [7] rmrevin/yii2-postman [8] dappur/framework [9] byjg/mailwrapper [10] qu-modules/qu-phpmailer [11] phpmailerflamin/phpmailer [12] phalapi/phpmailer [13] filips123/monolog-phpmailer [14] sun/sunmailer # 输入编号添加依赖 Enter package # to add, or the complete package name if it is not listed: 0 Enter the version constraint to require (or leave blank to use the latest version): Using version ^6.0 for phpmailer/phpmailer # 直接回车停止添加依赖 Search for a package: # 确认不再添加 Would you like to define your dev dependencies (require-dev) interactively [yes]? no # 预览生成的composer.json文件 { "name": "michael/demo", "description": "this is a demo", "type": "lib", "require": { "phpmailer/phpmailer": "^6.0" }, "license": "mit", "authors": [ { "name": "michael", "email": "*********@*****.com" } ], "minimum-stability": "dev" } # 确认生成配置文件 Do you confirm generation [yes]? yes # 将vendor添加到忽略列表 Would you like the vendor directory added to your .gitignore [yes]? yes

    完成之后提交到Github上去, 到这里基础配置就算完成了, 准备将项目注册到Packagist.

    三, 注册Packagist帐号

    注册地址: https://packagist.org/register/

    这里推荐大家直接使用Github帐号进行登录,  这样方便设置Github的事件推送. 如果不是Github上的项目

    可以不用绑定Github.

    四, 在Packagist注册项目

    登录后点击"Submit"来提交项目, 提交的时候只需要提供项目地址.

    提交的时候会检查vendor名称, 如果这个名称已经存在了, 那你需要联系所有者给你加个权限, 或者直接

    换个名字.

    五, Composer 安装

    项目提交后, 可以使用composer命令进行安装

    composer require michaelexample/demo:dev-master

    这里我们增加":dev-master"是因为这个库还没有发布版本

    现在在发布的项目进行打标签发布

    关于打标签, 希望能够按照固定的格式进行, 例如这篇语义化版本控制规范 https://semver.org/lang/zh-CN/

    git tag 0.0.0

    git push --tag

    Github会通过webhook将这个事件推送给Packagist, Packagist将更新包信息.

    然后我们通过下面的命令进行安装

    composer require michaelexample/demo

    这个时候省掉了后面的:dev-master

    六, composer require 的时候提示找不到包

    可能情况一: composer.json 包含了"version"属性, 导致Packagist在同步的时候仅仅同步version匹配上的版本, 其他版本不同步.

    https://medium.com/packagist/tagged-a-new-release-for-composer-and-it-wont-show-up-on-packagist-org-or-on-private-packagist-efaf21c212ff

    可能情况二: 打标完成后立刻进行require也会提示找不到包, 这个时候建议等个一两分钟就好.

    可能情况三: 如果你使用的国内的源, 由于不是实时同步, 所以也可能同步不到, 所以测试的时候最好切换到Packagist源.

    常见问题

    1. Could not find package diabolo/diabolo-application with stability stable.

    这个在github上直接release一个新版本,然后在packagist上更新一下就好

    个人推荐
    萨哈拉单板滑雪 https://sahala.suanhetao.com
  • 相关阅读:
    Notes of Daily Scrum Meeting(12.18)
    Notes of Daily Scrum Meeting(12.17)
    Notes of Daily Scrum Meeting(12.16)
    Notes of Daily Scrum Meeting(12.8)
    Notes of Daily Scrum Meeting(12.5)
    Notes of Daily Scrum Meeting(12.3)
    Notes of Daily Scrum Meeting(11.12)
    Linux中profile、bashrc、bash_profile之间的区别和联系
    Linux GCC编译
    mysql 5.7.16 远程连接
  • 原文地址:https://www.cnblogs.com/michaelluthor/p/10417307.html
Copyright © 2011-2022 走看看