Dashuang Du.
Dashuang Du.

study and practice, years of it.

Composer 的正确使用方式

2018, Jun 29    

本文介绍 composer 的简单使用及开发流程

官方文档

为什么需要 Composer

  • 模块化,降低代码重用成本
  • 统一的第三方代码组织方式
  • 更科学的版本更新

架构

安装方式

  • HomeBrew

      brew install composer
    
  • 手动下载

      wget https://getcomposer.org/composer.phar
      mv composer.phar /usr/local/bin/composer
      chmod +x /usr/local/bin/composer
    
  • 官方推荐安装方式

      php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
      php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
      php composer-setup.php
      ln -s /opt/composer.phar /usr/bin/composer
    

如何创建一个包

创建 composer 包

mkdir my-package
cd my-package
composer init

你会发现在my-package文件夹中新生成了一个composer.json文件:

{
    "name": "dudashuang/php-queue",
    "description": "a php client for message queue",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "dudashuang",
            "email": "dudashuang1222@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=7.0.0",
        "php-amqplib/php-amqplib": "^2.7",
        "kwn/php-rdkafka-stubs": "^1.2",
        "predis/predis": "^1.1"
    },
    "autoload": {
        "psr-4": {
            "Lily\\": "src/",
            "LilyTest\\": "examples/"
        }
    }
}
  • name: 包名
  • require: 依赖
  • autoload: 自动加载
  • minimum-stability: 稳定性(dev, alpha, beta, RC)

本地测试创建的包

在我们业务项目中的 composer.json 加入:

{
      ...,
    "repositories": {
        "dudashuang": {
            "type": "path",
            "url": "/vagrant/www/dudashuang/php-queue"
        }
    }
}

或者直接运行:

composer config repositories.dudashuang path /vagrant/www/dudashuang/php-queue

添加依赖

composer require dudashuang/php-queue:dev-master -vvv

如果你细心点,会发现,业务项目中的 vendor 目录下的 dudashuang/php-queue 依赖项目是一个软连接。也就是说, 你在/vagrant/www/dudashuang/php-queue中添加新文件,添加一个新方法,然后在业务项目中调用即可, 不需要重新composer update,非常方便。

composer 包的发布

github:

  • 在 github 上创建一个 repository
  • 将我们本地经过测试的包代码上传到 repository
  • packagist.org 提交 repository 地址
  • 在 github 项目里设置 packagist 的同步更新服务,具体操作是: Settings > Integrations & services > Add service > 选择 packagist > 输入 packagist 的usernameAPI_TOKEN

bitbucket:

前三部和 github 一样,第四部的具体操作是:settings > Webhooks > Add new hook > set url:https://packagist.org/api/bitbucket?username=dudashuang&apiToken=API_TOKEN

安装依赖包

  • 方式一:编辑composer.json && composer update
  • 方式二:composer require dudashuang/php-queue:^1.0

composer 版本号的组成

MAJOR.MINOR.PATH

  • MAJOR: 通常会发生 API 变更,不向后兼容
  • MINOR: 新增功能,但是向后兼容
  • PATH: 补丁,向后兼容,修复 bug

Release Operators

  • ”~”: 指定向后兼容的最小版本
    • ~1.2 等于 >=1.2 && <2.0.0
    • ~1.2.3 等于 >=1.2.3 && <1.3.0
  • ”^”: 允许大版本前的所有版本
    • ^1.2 等于 >=1.2 && <2.0.0
    • ^1.2.3 等于 >=1.2.3 && <2.0.0 (区别在这里)

版本号的各种写法

  • 确切版本: “1.0.2”
  • 范围: “>=1.0”, “>=1.0 <2.0”, “>=1.0 <1.1 || >=1.2”
  • 连字符范围: “1.0 - 2.0”
  • 通配符: “1.0.*”
  • ~运算符: “~1.2.3”
  • ^运算符: “^1.2.3”

版本锁定

  • 版本锁定文件: composer.lock
  • composer install 产生它 & 使用它
  • composer update 更新它
  • composer.lock 是否应该加入版本控制? Project 需要,Library 不需要

发布公司内部用的闭源包

公司内部用的包,上传到 GitLab 或者其它私有的代码托管平台。

composer.json文件中添加repositories直接用vcs指定代码库地址

原文链接:https://laravel-china.org/articles/5333/modular-development-of-php-based-on-composer