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
  • 相关阅读:
    Java生成登录随机验证码
    Java调用百度API实现人脸识别
    阿里云CentOS开放端口
    Windows环境下利用nginx作为图片服务器
    SpringCloud使用Feign调用服务,@ModelAttribute无法传递实体类参数
    Solr7正确的调用SolrClient姿势
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree(BST求最近公共祖先)
    LeetCode 538. Convert BST to Greater Tree(把BST每个节点的值都加上比它大的节点的值)
    Trie树模板例题
    Google KickStart 2020 RoundA
  • 原文地址:https://www.cnblogs.com/michaelluthor/p/10417307.html
Copyright © 2011-2022 走看看