1. 创建一个 GitHub 项目 https://github.com/52lu/php-tools.git
2. 生成composer.json
前提安装好composer
root@707dfe5d675c:/var/www/php-tools Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (<vendor>/<name>) [root/php-tools]: lazy/phptools Description []: 收集PHP开发工程中经常用到的轮子,避免二次开发 Author [定时任务 <cron@example.com>, n to skip]: 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 namespace phpTools ;class StringTools { 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 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 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
7. 疑问 7.1 要不要把 composer.lock 上传到代码库?
如果你的代码是一个项目,就上传,如果是一个工具包,给大家用的,就别上传。
composer.lock的作用
在已经存在 composer.lock 的目录执行 composer install 的时候,是不会分析包依赖的,它只是按 composer.lock 中描述的下载地址直接下载,所以会快很多,而且版本号是具体的。那怕包已经发了新版,只要 composer.lock 没动过,它就会按 composer.lock 里的版本来安装。composer update 时会更新 composer.lock,所以不要乱用 composer update。