开发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 发布步骤

  1. 首先要在 Packagist 上注册账号并登录(可以用 GitHub 直接登录)

    image-20200717132326805

  2. 点击顶部导航条中的 Summit 按钮

    image-20200717132600304

  3. 在输入框中输入 GitHub 上的刚才包地址,如上图。

  4. 然后点击 Check 按钮 Packagist 会去检测此仓库地址的代码是否符合 Composer 的 Package 包的要求 检测正常的话,会出现 Submit 按钮,再点击一下 Submit 按钮,我们的包就提交到 Packagist 上了。

    image-20200717132737045

上传成功后的页面

image-20200717132810676

6. 设置composer 包自动更新

上面提交上的包提交的包,当我们更新 GitHub 仓库时,Packagist 上面的的包并不会自动更新,现在我们来设置一下自动更新。

6.1 获取 Profile API Token

image-20200717133243237

6.2 设置代码库(github)

  • 打开github settings->webhooks->addwebhook

image-20200717133638987

image-20200717140207404

image-20200717140256858

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/

版权声明: 转载请保留原文链接及作者。

目录
×

看您心情~~