composer 简要

composer

https://docs.phpcomposer.com/01-basic-usage.html

安装

brew install composer

配置仓库地址

composer config [-g] repo.packagist composer https://packagist.phpcomposer.com
配置全局的composer仓库地址

编辑项目的composer.json或~/.config/composer/config.json,增加repositories一项配置
配置项目的composer仓库地址

常用命令

https://docs.phpcomposer.com/03-cli.html

composer search **
根据关键字查找composer依赖包

composer init
交互式的输入包信息,生成composer.json文件后再补全其他字段信息

composer install [**/***]
根据composer.json文件自动加载依赖包至vendor目录下,最终安装的依赖包版本可能取决于有无composer.lock文件

composer dump-autoload 
在vendor目录下自动生成autoload.php

composer update [**/***]
根据composer.json文件更新项目依赖,相当于删除composer.lock文件后执行composer install

composer require [**/***:***]
安装composer依赖

composer validate [**/***]
验证依赖是否可用

composer.json

https://getcomposer.org/doc/04-schema.md

{
    "name": "cym/testuse",      //包的名称,由作者名称和项目名称组成,使用/分割(包名称可以包含任何字符,包括空格,并且不区分大小写),但惯例是使用小写字母,并用连字符作为单词的分隔
    "description": "test use package",   //包的功能描述
    "version":"1.0.0",        //版本, 格式必须遵循  X.Y.Z 或 vX.Y.Z(非必须属性),可选后缀 -dev、-patch、-alpha、-beta 或 -RC
    "authors": [                                                    //作者信息 (非必须属性)
        {
            "name": "caoyunmeng",
            "email": "yunmengcao@gmail.com",
            "homepage": "https://www.example.com",
            "role":"Developer"
        }
    ],
    "type": "project",                                          //包的类型(非必须属性)
    "homepage":"https://github.com/",                            //包的源码地址(非必须属性)
    "readme":"",                                                //表示README 文档的绝对路径(非必须属性)
    "time":"2020-11-23",                                                  //表示包的版本发布时间(非必须属性),必须符合 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS 格式
    "license": "MIT",                                               //遵循的协议(非必须属性)
    "keywords": [                                                   //表示一组用于搜索与筛选的与包相关的关键字(非必须属性)
        "Yii2",
        "widget",
        "bootstrap4",
        "adminlte3",
        "php"
    ],
    "minimum-stability": "dev",                                     //这个属性定义了按稳定性过滤包的默认值,默认为stable;可用的稳定性标识:dev、alpha、beta、RC、stable。
    "require": {                                                    //表示必须安装的依赖包列表
        "php": ">=7.3.7"
    },
    "require-dev":{                                                  //表示开发或运行测试时的依赖包列表
        "zy/ydweb":"dev-master"
    },
    "autoload": {                                                   //自动加载
        "psr-4": {                                                  //自动使用的 psr-4 格式
            "pf\\arr\\": "src/"        // key命名空间,value本地代码路径
        }
    },
    "autoload-dev": {
        "psr-4": {
            "example\\": "example"
        }
    },
    "extra":{               //表示scripts 使用的任意扩展数据
        "yii\\composer\\Installer::postCreateProject": {
            "setPermission": [
                {
                    "runtime": "0777",
                    "web/assets": "0777",
                    "yii": "0755"
                }
            ]
        }
    },
    "config":{
        "optimize-autoloader":"true"
    }
}

  • 类型
"type": "project"

library: 默认类型,当前包是一个库。可以将文件复制到 vendor 目录。
project: 当前包是一个项目,而不是一个库。
metapackage: 包含需求并将触发其安装的空包,但不包含文件,并且不会向系统写入任何内容。因此这种安装类型并不需要一个 dist 或 source。
composer-plugin: 一个安装类型为 composer-plugin 的包,它有一个自定义安装类型,可以为其它包提供一个 installler
  • 遵循的协议
 "license": "MIT"
 
 https://spdx.org/licenses/ 常见协议:
 Apache-2.0
 BSD-2-Clause
 BSD-3-Clause
 BSD-4-Clause
 GPL-2.0-only / GPL-2.0-or-later
 GPL-3.0-only / GPL-3.0-or-later
 LGPL-2.1-only / LGPL-2.1-or-later
 LGPL-3.0-only / LGPL-3.0-or-later
 MIT

  • 依赖包匹配规则
-确定版本: 1.0.2
-范围版本:>=1.0.2
-连字符范围: 1.0-2.0
-通配符: 1.0.*
-"~":指定向后兼容的最小版本
eg:~1.2 等同于 >=1.2.0 && <2.0.0
   ~1.2.3 等同于 >=1.2.3 && <1.3.0
-"^":允许大版本前的所有版本
eg:^1.2 等同于 >=1.2 && <2.0.0
    ^1.2.3 等同于 >=1.2.3 && <2.0.0
  • 仓库配置

https://docs.phpcomposer.com/05-repositories.html#Using-private

"repositories": {
    "packagist": {
        "type": "composer",   //指定仓库的类型
        "url": "https://packagist.phpcomposer.com"   //指定仓库的地址
    }
}

type的取值:
composer,Composer包托管仓库,例如 https://packagist.phpcomposer.com;
vcs,版本控制管理系统,例如 https://git.yidian-inc.com:8021/caoyunmeng/hubble-server.git;
pear,PEAR上的包;
package,位于互联网上包;
artifact,代码zip包合集;
path,指向代码具体位置。
  • config

https://getcomposer.org/doc/06-config.md

config配置只在项目中发挥作用,常用配置:
缓存dist包优先
"preferred-install":"dist"或composer install|update 添加 --prefer-dist
优化自动加载(性能提升25%-30%)
"optimize-autoloader":"true"或composer install -o
使用Authoritative class maps或apcu cahe缓存空结果
"classmap-authoritative":"true"或composer install –a --classmap-authoritative|--apcu-autoloader

composer.lock

  • 当执行composer install命令之后,将会根据当前composer.json文件中指定的依赖包版本生成composer.lock文件。此后,install命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略composer.json文件中的定义)。如果不存在composer.lock文件,Composer将读取composer.json并创建锁文件。
  • 一般在项目中,会选择将composer.lock上传至git库,用于保证项目成员开发中所有依赖包版本保持一致。但是在库中,一般不会将composer.lock文件上传至git库,

创建自己的composer库

https://docs.phpcomposer.com/02-libraries.html

  • 创建自己的包结构目录
hello-composer
        |
        |-- src    包源码
        |    |-- build  功能代码 
        |
        |-- example  一些实例
        |
        |-- README.md
        |
        |-- composer.json 下面生成
  • 填写包描述文件(创建composer.json文件)
{
    "name": "test/hello-composer",
    "description": "Hello, Composer!",
    "type": "library",
    "require": {
        "php": ">=7.0"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "cym",
            "email": "cym@google.com"
        }
    ],
    "minimum-stability": "stable",
    "autoload": {
        "psr-4": {
            "test\\": "src/"
        }
    }
}
  • 编写类库,在vendor同级目录下创建src目录,在src目录下创建HelloComposer.php
namespace test;

class HelloComposer
{
    public static function greet()
    {
        echo "Hello, Composer!", PHP_EOL;
    }
}

注意:

  1. 代码风格建议参考PSR-2规范:https://www.php-fig.org/psr/psr-2/,文件命名和路径规范建议参考PSR-4规范:https://www.php-fig.org/psr/psr-4/

示例:

完整类名命名空间前缀文件基目录文件路径
\Acme\Log\Writer\File_WriterAcme\Log\Writer./acme-log-writer/lib/./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\StatusAura\Web/path/to/aura-web/src//path/to/aura-web/src/Response/Status.php
\Symfony\Core\RequestSymfony\Core./vendor/Symfony/Core/./vendor/Symfony/Core/Request.php
\Zend\AclZend/usr/includes/Zend//usr/includes/Zend/Acl.php

2. 文件的路径需与composer.json中autoload的值相匹配。

  • 引用自己的composer包

新建一个exam项目,引用上文创建的包并查看效果。新建exam文件夹,创建composer.json

    {
        "name": "test/exam-hello-composer",
        "description": "Hello, Composer!",
        "type": "project",
        "license": "MIT",
        "authors": [
            {
                "name": "cym",
                "email": "cym@google.com"
            }
        ],
        "require": {
            "test/hello-composer": "*"
        },
        "minimum-stability": "dev",
        "repositories": {
            "local": {
                "type": "path",
                "url": "/path/to/hello-composer"
            }
        }
    }

配置文件需要注意两点:

  1. 如果hello-composer的composer.json文件没有version字段(或不是稳定版),minimum-stability值要是dev(默认是stable),否则无法安装; 
  2. 需添加自定义仓库,type值为path。
  • 执行composer install,引入文件,会在vendor目录下自动生成test/hello-composer目录
  • 创建项目,使用引用的文件
    namespace test;
    
    require "vendor/autoload.php";
    
    use test\HelloComposer;
    
    class Test
    {
        public static main()
        {
            HelloComposer::greet();
        }
    }
    
    Test::main();

发布composer包

将Composer包发布到互联网的方式有几种:

  1. 打包成zip,上传到任意一个可公开访问的网站;
  2. 通过版本控制软件,上传到代码仓库;
  3. 提交到PEAR社区;
  4. 提交到私有的Composer仓库;
  5. 提交到Packagist。

如果代码开源,建议提交到Packagist,方便全世界的PHP开发者检索和使用,为Composer生态做贡献。

提交包到Packagist,要经历以下过程:
5.1 在Github创建项目并提交代码;
5.2 在Packagist输入项目地址提交包;
5.3 在Github配置项目,触发Packagist自动更新。

前两步是必须的,第三步可选。本着为提交的包负责的态度,强烈建议完成第三步操作。 提交包的过程涉及到Github和Packagist两个站点,Github和Packagist之间的关系为:Github托管实际的代码和文件;Packagist托管包的作者、包名、版本号、下载量等元数据保。简要说Packagist是索引,Github是内容提供方。

将composer包提交至packagist

前提条件

  1. github账号
  2. packagist账号

创建自己的项目

  • github上创建自己的开放型仓库,然后执行git clone克隆至本地进行开发。在项目根目录下创建composer.json文件
{
        "name": "test/exam-hello-composer",
        "description": "Hello, Composer!",
        "type": "project",
        "license": "MIT",
        "authors": [
            {
                "name": "cym",
                "email": "cym@google.com"
            }
        ],
        "require": {
            
        },
        "minimum-stability": "stable",
        "repositories": {

        }
}
  • 使用composer validate验证包是否可用
  • 进行项目的开发,然后将代码提交至github
  • 对代码进行tag打包
    git tag -a v1.0.0 -m "package init""
  • 登陆packagist,点击页面右上角submit,将github项目地址复制入Repository URL(Git\svn\Hg),点击输入框下方check按钮,当检测没有问题时,chekck按钮会转变为提交按钮,点击提交即可
  • 在本地使用命令composer create-project命令拉取packgist中的框架代码至本地创建新的项目,执行命令: composer create-project yidian/yaf_demo vpn 1.0.0

搭建私有的composer库

https://github.com/composer/satis/tree/1.0.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值