└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # composer私有仓库建设 2 | 3 | ## 背景 4 | 5 | * 新建项目没有规范,随手拷贝已有项目已成"乱象" 6 | * 已有项目对框架侵入严重,每个项目的框架代码都不相同 7 | * 基于复制粘贴复制公共库,代码不一致,无法统一升级更新,效率低下 8 | 9 | ## 目标 10 | 11 | * 统一项目脚手架:命令一键创建新项目 12 | * 统一基础公共库:命令一键安装与更新依赖 13 | 14 | ## 路线图 15 | 16 | * composer satis + gitlab 私有仓库搭建 17 | * composer工具培训 18 | * 脚手架接入composer仓库 19 | * 图片处理、link处理等常见痛点封装为公共库,接入composer仓库 20 | 21 | ## 架构 22 | 23 | 基于composer+gitlab搭建整套架构,其中composer类似于java maven、python pip、nodejs npm,是一款可靠的php包管理工具。 24 | 25 | ``` 26 | composer cli <--- packagist.baidu.com <--- gitlab-team.baidu.com 27 | ``` 28 | 29 | * 客户端:composer完成依赖配置、安装、更新 30 | * 私有仓库:composer satis搭建,仅维护私有包的索引信息 31 | * 代码托管:gitlab,存储库代码,维护分支与tag 32 | 33 | ## composer安装与使用 34 | 35 | ### 安装 36 | 37 | ``` 38 | curl -sS https://getcomposer.org/installer | php 39 | 40 | mv composer.phar /usr/local/bin/composer 41 | ``` 42 | 43 | 安装成功后,可以直接使用composer命令。 44 | 45 | 使用Windows的同学可以通过Phpstorm直接安装与管理composer。 46 | 47 | ### 创建项目 48 | 49 | 执行composer init来初始化一个空白项目,也称为"root项目"。 50 | 51 | ``` 52 | composer init 53 | 54 | 55 | Welcome to the Composer config generator 56 | 57 | 58 | 59 | This command will guide you through creating your composer.json config. 60 | 61 | Package name (/) [owenliang/myproject]: 62 | ``` 63 | 64 | 根据提示填入各种信息即可,最终会生成composer.json配置文件。 65 | 66 | 生成后的composer.json文件如下: 67 | 68 | ``` 69 | { 70 | "name": "owenliang/myproject", 71 | "authors": [ 72 | { 73 | "name": "owenliang", 74 | "email": "120848369@qq.com" 75 | } 76 | ], 77 | "require": {} 78 | } 79 | ``` 80 | 81 | ### 安装外部依赖 82 | 83 | 作为root项目,通常只关心自己依赖哪些包、包的版本是什么。 84 | 85 | 默认composer只会在[官方仓库](https://packagist.org/)中寻找你要安装的包,例如安装一个elasticsearch的客户端: 86 | 87 | ``` 88 | composer require 'ongr/elasticsearch-dsl:^5.0' 89 | ``` 90 | 91 | 包的命名遵循:"组织名/包名",是全局唯一的,冒号之后是版本控制,具体规则后面会提供学习链接。 92 | 93 | 安装这样的第三方包不需要做额外的配置,composer工具总是会到官方仓库中寻找你要安装的包。 94 | 95 | 现在composer.json如下: 96 | 97 | ``` 98 | { 99 | "name": "owenliang/myproject", 100 | "authors": [ 101 | { 102 | "name": "owenliang", 103 | "email": "120848369@qq.com" 104 | } 105 | ], 106 | "require": { 107 | "ongr/elasticsearch-dsl": "^5.0" 108 | } 109 | } 110 | ``` 111 | 112 | ### 安装内部依赖 113 | 114 | 安装私有仓库的包略有不同,首先需要配置composer私有库的地址,编辑上述composer.json: 115 | 116 | ``` 117 | { 118 | "name": "owenliang/myproject", 119 | "authors": [ 120 | { 121 | "name": "owenliang", 122 | "email": "120848369@qq.com" 123 | } 124 | ], 125 | "require": { 126 | "ongr/elasticsearch-dsl": "^5.0" 127 | }, 128 | "repositories": [{ 129 | "type": "composer", 130 | "url": "http://packagist.baidu.com" 131 | }], 132 | "config": { 133 | "secure-http": false 134 | } 135 | } 136 | ``` 137 | 138 | 现在尝试安装一个私有的包: 139 | 140 | ``` 141 | composer require 'baidu/common:^1.0' 142 | ``` 143 | 144 | composer工具会到[私有仓库](http://packagist.baidu.com)查找这个包,如果没找到还会去默认的官方仓库查找。 145 | 146 | 未来可以移除secure-http选项,因为最终私有仓库域名会改为https协议。 147 | 148 | ### 常用命令 149 | 150 | * 初始化composer.json: 151 | 152 | ``` 153 | composer init 154 | ``` 155 | 156 | * 安装依赖 157 | 158 | ``` 159 | composer require "组织名/库名:版本控制" 160 | ``` 161 | 162 | * 删除依赖 163 | 164 | ``` 165 | composer remove "组织名/库名" 166 | ``` 167 | 168 | * 升级依赖(先修改composer.json中的依赖配置) 169 | 170 | ``` 171 | composer update 172 | ``` 173 | 174 | * 清空缓存 175 | 176 | ``` 177 | composer clearcache 178 | ``` 179 | 180 | ### 引入composer自动加载 181 | 182 | composer安装的包文件存储在vendor目录。 183 | 184 | 为了在自己的项目中使用安装的依赖库,需要加载composer的autoload函数,这样才能访问到包中的类和方法: 185 | 186 | ``` 187 |