开发compose包
1. 创建一个 GitHub 项目
# 克隆到本地
https://github.com/52lu/php-tools.git
2. 生成composer.json
前提安装好composer
root@707dfe5d675c:/var/www/php-tools# composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
# 包的名称,后续 composer require lazy/phptools 安装此包
Package name (<vendor>/<name>) [root/php-tools]: lazy/phptools
# 对包的描述信息
Description []: 收集PHP开发工程中经常用到的轮子,避免二次开发
# 填写作者信息,可以先跳过,后续修改文件
Author [定时任务 <cron@example.com>, n to skip]:
# 此处值不能乱填,否则:Invalid minimum stability "sdfsd". Must be empty or one of: stable, RC, beta, alpha, dev
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
"name": "52lu/phptools",
"description": "收集PHP开发工程中经常用到的轮子,避免二次开发。",
"authors": [
{
"name": "定时任务",
"email": "cron@example.com"
}
],
"minimum-stability": "dev",
"require": {}
}
Do you confirm generation [yes]? yes
上面提示信息可以一直按回车键,生成composer.json文件以后,在对文件修改
修改后的composer.json文件
{
"name": "52lu/phptools",
"description": "收集PHP开发工程中经常用到的轮子,避免二次开发",
"homepage": "https://github.com/52lu/php-tools.git",
"authors": [
{
"name": "qinghui",
"email": "liuqinghui1991@163.com",
"homepage": "https://52lu.github.io",
"role": "Developer"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=7.0",
"ext-json": "*"
}
}
文件简要说明
- require : 告诉 Composer 你的项目所依赖的包有哪些,以及包的版本信息
- homepage: 源码地址 (可选填)
- authors.homepage : 个人网站地址(可选填)
- authors.role: 作者在项目承担的角色 (可选填)
- minimum-stability: 稳定性标识,定义了按稳定性过滤包的默认值,默认为 stable。所以如果你依赖 dev 包,你应该在你的文件中指定。所有包都将根据稳定性检出相应的版本,那些低于 minimum-stability 设置的版本将被自动忽略。(请注意,你还可以使用在 require 中指定的版本约束来定义每个包的稳定性要求)
3. 创建src目录,编辑代码
src/StringTools.php
<?php
/**
* @Description: 字符串处理工具
* @Author: Mr.LiuQHui
* @Date: 2020/7/17 11:51 上午
*/
namespace phpTools;
/**
* @Description:
* @Class StringTools
* @Package phpTools
*/
class StringTools
{
/**
* @description: 计算字符串长度
* @param $str
* @param string $encoding
* @return bool|int
* @autor Mr.LiuQHui
*/
public static function strlen(string $str, $encoding = 'UTF-8')
{
if (is_array($str) || is_object($str)) {
return false;
}
$str = html_entity_decode($str, ENT_COMPAT, 'UTF-8');
if (function_exists('mb_strlen')) {
return mb_strlen($str, $encoding);
}
return strlen($str);
}
}
此时的目录结构
├── README.md
├── composer.json
└── src
└── StringTools.php
修改 composer.json,加入自动加载
{
"name": "52lu/phptools",
"description": "收集PHP开发工程中经常用到的轮子,避免二次开发",
"homepage": "https://github.com/52lu/php-tools.git",
"authors": [
{
"name": "qinghui",
"email": "liuqinghui1991@163.com",
"homepage": "https://52lu.github.io",
"role": "Developer"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=7.0",
"ext-json": "*"
},
// 新增自动加载
"autoload": {
"psr-4": {
"phpTools\\": "src/"
}
}
}
4. 测试
4.1 执行 composer install
root@707dfe5d675c:/var/www/php-tools# composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
此时目录结构
├── README.md
├── composer.json
├── composer.lock
├── src
│ └── StringTools.php
└── vendor
├── autoload.php
└── composer
├── ClassLoader.php
├── LICENSE
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
├── autoload_static.php
└── installed.json
4.2 创建测试目录
tests/testStringTools.php
<?php
require_once '../vendor/autoload.php';
$str='hello word';
$len = \phpTools\StringTools::strlen($str);
echo 'length= '.$len.PHP_EOL;
执行测试文件
root@707dfe5d675c:/var/www/php-tools/tests# php testStringTool.php
length= 10
5.发布到 packagist
packagist 指的是 packagist.org。这个网站是 composer 默认下载开发包的资源引用网站。所以,我们得在此网站注册一个账号。然后添加我们开发包的github项目。
5.1 发布步骤
首先要在 Packagist 上注册账号并登录(可以用 GitHub 直接登录)
点击顶部导航条中的 Summit 按钮
在输入框中输入 GitHub 上的刚才包地址,如上图。
然后点击 Check 按钮 Packagist 会去检测此仓库地址的代码是否符合 Composer 的 Package 包的要求 检测正常的话,会出现 Submit 按钮,再点击一下 Submit 按钮,我们的包就提交到 Packagist 上了。
上传成功后的页面
6. 设置composer 包自动更新
上面提交上的包提交的包,当我们更新 GitHub 仓库时,Packagist 上面的的包并不会自动更新,现在我们来设置一下自动更新。
6.1 获取 Profile API Token
6.2 设置代码库(github)
- 打开github
settings->webhooks->addwebhook
填写Payload URL
7. 疑问
7.1 要不要把 composer.lock 上传到代码库?
如果你的代码是一个项目,就上传,如果是一个工具包,给大家用的,就别上传。
composer.lock的作用
在已经存在 composer.lock 的目录执行 composer install 的时候,是不会分析包依赖的,它只是按 composer.lock 中描述的下载地址直接下载,所以会快很多,而且版本号是具体的。那怕包已经发了新版,只要 composer.lock 没动过,它就会按 composer.lock 里的版本来安装。composer update 时会更新 composer.lock,所以不要乱用 composer update。
转载请注明来源,欢迎指出任何有错误或不够清晰的表达。
文章标题:开发compose包
文章字数:1.4k
本文作者:猿码记
发布时间:2018-09-23 12:07
原始链接:liuqh.icu/2018/09/23/composer-pack-dev/版权声明: 转载请保留原文链接及作者。