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 的
username
和 API_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