composer 常用命令包括
# 在一个已经存在composer.json的项目中,install用来安装所声明的依赖composer install # require用来安装某个包composer require packagename# update 用来更新所有依赖到最新版本,一样平常不要利用,可以单独更新某个包即可composer update # 移除某个依赖composer remove packagename# 当更新了composer.json之后可以实行这个命令composer dumpautoload
composer的事理:
一样平常我们编码完某个完全的功能之后,如供应了一个日志包,我们常日会托管到vcs,composer会通过读取composer.json配置获取源码包,如果我们不声明composer.json中repositories,则默为packagist.org这是官方的仓库,那当我们每次install的时候都会到这里拉取包,全体流程看起来是这样,客户端每次从仓库拉取下载依赖,仓库根据配置掩护依赖信息,仓库可以从vcs获取包的源代码。
client-repostory

packagist.org有时由于网络缘故原由可能导致很慢,我们可以配置阿里云的源来提高访问速率
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
但是每次install都须要去拉取还是须要一些网络花费,另一方面如果自己私有包也未便利放到官方仓库中,这里我们可以搭建自己的私有仓库。
我们利用官方satis的办法来进行。https://github.com/composer/satis
利用步骤首先下载satis:composer create-project composer/satis --stability=dev --keep-vcs
2.创建配置文件satis.json: 紧张用来配置依赖、仓库、归档等
{ "name": "self-repository", "homepage": "http://127.0.0.1:8099/", // 源码仓库 "repositories": [// type可以是vcs 如填写一个git仓库地址// 也可以是composer代表是一个composer仓库,这里我们利用阿里云的仓库// 比git要快{ "type": "composer", "url": "https://mirrors.aliyun.com/composer/" } ], // 须要引入哪个包及版本 // 如果填写的话,build的韶光会比较长奥,由于他要拉取说有版本 "require":{ "guzzlehttp/guzzle":"" }, // 依赖的依赖是否要引入 "require-dependencies": true, // 是否要缓存到本地 "archive": { // 目录 "directory": "dist",7 // 打包的格式 "format": "tar", // 访问url "prefix-url": "http://127.0.0.1:8099/", // 是否跳过dev依赖 "skip-dev": true }}
3.build天生仓库文件:
php -d memory_limit=-1 ./bin/satis build satis.json public/
4.现在就可以在客户端拉取了,编写客户端composer.json
{"require":{"guzzlehttp/guzzle":"~6.2.0"},"config": { "secure-http": false },"repositories": [ { "type": "composer", "url": "http://127.0.0.1:8099/" } ]}
实行composer install -vvv 可以看到依赖包是从127.0.0.1:8099直接下载来的。这样就节省了韶光与网络连接,提高了启动速率
composer install -vvv
composer.lock
我们从server的log也可以看到
PHP 7.3.11 Development Server started at Thu Sep 10 11:17:22 2020Listening on http://127.0.0.1:8099Document root is /Users/gaoz/project13/php_demo/satis/publicPress Ctrl-C to quit.[Thu Sep 10 11:35:07 2020] 127.0.0.1:59086 [200]: /[Thu Sep 10 11:35:08 2020] 127.0.0.1:59087 [404]: /favicon.ico - No such file or directory[Thu Sep 10 11:43:34 2020] 127.0.0.1:62717 [200]: /[Thu Sep 10 11:44:46 2020] 127.0.0.1:63187 [200]: //dist/guzzlehttp/guzzle/guzzlehttp-guzzle-d094e337976dff9d8e2424e8485872194e768662-zip-a8745d.tar[Thu Sep 10 11:46:28 2020] 127.0.0.1:63874 [200]: /[Thu Sep 10 11:46:29 2020] 127.0.0.1:63875 [200]: /[Thu Sep 10 11:46:30 2020] 127.0.0.1:63885 [200]: /[Thu Sep 10 11:46:30 2020] 127.0.0.1:63891 [200]: /[Thu Sep 10 11:47:35 2020] 127.0.0.1:64320 [404]: /composer.json - No such file or directory[Thu Sep 10 11:50:29 2020] 127.0.0.1:65227 [200]: /packages.json[Thu Sep 10 11:52:30 2020] 127.0.0.1:49905 [200]: /packages.json[Thu Sep 10 11:52:30 2020] 127.0.0.1:49906 [200]: /include/all%245aa070c74c1cb41e55a6d7017e066dec7b06f52f.json[Thu Sep 10 11:52:53 2020] 127.0.0.1:50057 [200]: /packages.json[Thu Sep 10 11:52:57 2020] 127.0.0.1:50086 [200]: //dist/ralouphie/getallheaders/ralouphie-getallheaders-120b605dfeb996808c31b6477290a714d356e822-zip-821645.tar[Thu Sep 10 11:52:57 2020] 127.0.0.1:50087 [200]: //dist/psr/http-message/psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363-zip-7ab320.tar[Thu Sep 10 11:52:57 2020] 127.0.0.1:50088 [200]: //dist/guzzlehttp/psr7/guzzlehttp-psr7-239400de7a173fe9901b9ac7c06497751f00727a-zip-b3dac2.tar[Thu Sep 10 11:52:57 2020] 127.0.0.1:50089 [200]: //dist/guzzlehttp/promises/guzzlehttp-promises-a59da6cf61d80060647ff4d3eb2c03a2bc694646-zip-081b1f.tar[Thu Sep 10 11:52:57 2020] 127.0.0.1:50090 [200]: //dist/guzzlehttp/guzzle/guzzlehttp-guzzle-8d6c6cc55186db87b7dc5009827429ba4e9dc006-zip-fdc331.tar
启动做事或者nginx 配置访问目录, 这里我们利用PHP启动一个大略的server,公司项目最好利用Nginx代理一下, 通过web端可以看到私有库的包列表
gaoz@localhost satis % php -S 127.0.0.1:8099 -t public
访问8099
satis-web端
干系文档:
satis利用方法:https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md
干系代码:https://github.com/nobody05/composer_satis_demo