安装composer
在C盘根目录新建composer文件夹(也可以安装在其他位置)
cmd进入composer文件夹,执行如下命令:
下载安装脚本 - composer-setup.php - 到当前目录
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
执行安装过程
php composer-setup.php
删除安装脚本
php -r "unlink('composer-setup.php');"
通过以上步骤,composer文件夹下就多出一个composer.phar文件,可以将 composer.phar 文件复制到任意目录(比如项目根目录下),然后通过 php composer.phar 指令即可使用 Composer 了
如果想实现在cmd窗口中直接输入composer,则需要将composer.phar 复制到 PHP 的安装目录下面,也就是和 php.exe 在同一级目录。在 PHP 安装目录下新建一个 composer.bat 文件,并将下列代码保存到此文件中
@php "%~dp0composer.phar" %*
最后重新打开一个命令行窗口试一试执行 composer –version 看看是否正确输出版本号。
composer更新
命令更新
composer selfupdate
下载替换
如果更新速度慢,也可以直接下载composer.phar文件下载后替换
下载地址:
https://install.phpcomposer.com/composer.phar
卸载composer
windows系统在cmd中输入
where composer
查看composer位置,并删除文件夹即可。
查看全局设置
composer config -gl
设置composer镜像为国内镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
第一次使用
以monolog包为例,这个包可以让开发者很方便地将日记写入到文件、数据库或其他储存介质中
在项目根目录新建composer.json文件,写入以下内容
{
"require": {
"monolog/monolog": "1.2.*"
}
}
执行composer install指令安装包依赖
安装完成后,文件夹目录如下图:
使用包进行开发
composer已经下载了monolog包,且生成了autoload.php自动加载文件
新建monolog.php文件,内容如下:
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('monolog.log', Logger::WARNING));
// add records to the log
$log->warn('警告日志');
$log->err('错误日志');
运行脚本:
php monolog.php
运行后,目录下生成了日志文件monolog.log。
关于包版本
在composer.json中声明安装包时,需要指定包的版本,版本号的指定有多种格式:
确定的版本号
格式:1.0.2
最简单的指定方式,无歧义
在一定范围的版本号
可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。 AND 的优先级高于 OR
>=1.0: 大于或等于1.0版本
>=1.0,<2.0: 大于或等于1.0,且小于2.0
>=1.0,<1.1|>=1.2: 大于或等于1.0且等于1.1,或者大于等于1.2
通配符
1.0.*: 只要满足以1.0开头的版本号均可
下一个重要版本
~1.2 相当于 >=1.2,<2.0
~1.2.3 相当于 >=1.2.3,<1.3
第一次执行composer install命令时,会生成composer.lock文件,这个文件记录了包的指定版本,当再次执行composer install时,composer会先去composer.lock中检查有没有相应的包信息,如果有,以composer.lock的版本为准。如果要跳过composer.lock的限制,需要改用composer update指令。
composer.lock锁文件
composer.json在指定版本时,不一定是精确指定,很多时候是使用范围指定,只有当我们安装了包,才知道最终安装了哪个版本。那么问题来了,如果我们半年后再根据composer.json来安装包,可能有些包的版本已经升级了,且向下不兼容,这就有可能导致程序报错。为避免这种问题,在执行composer install之后,composer会生成composer.lock锁文件。
在锁文件中可以看到完整的包信息,包括包的版本号。
composer install命令会先检查锁文件是否存在,如果存在,它将下载composer.lock指定的版本(忽略 composer.json 文件中的定义)
如果在composer.json中修改了版本号,必须执行composer update命令,这个命令会根据composer.json的定义安装包,并更新composer.lock文件
锁文件非常重要!必须将composer.lock文件上传到代码仓库,这样才能保证团队各成员所安装的包版本是一致的。
自定义脚本
一个脚本,在 Composer 中,可以是一个 PHP 回调(定义为静态方法)或任何命令行可执行的命令。脚本对于在 Composer 运行过程中,执行一个资源包的自定义代码或包专用命令是非常有用的。
在Laravel的composer.json文件中,有这么一段声明:
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
}
表示在执行composer install时的相应阶段,会自动触发运行脚本
更多关于脚本的介绍:https://docs.phpcomposer.com/articles/scripts.html
发布自己的包
github上新建一个仓库
创建composer.json文件
在项目根目录执行composer init,生成composer.json配置文件
在packagist提交github仓库地址
在packagist注册账号,然后登录。
提交github仓库地址
包创建成功
如果用的是国内的镜像,暂时还不能拉取,需要等国内镜像同步成功后才能拉取
设置自动同步
如果要实现当github仓库代码更新就触发包的自动更新,需要进行以下设置
在github中添加packagist服务
自动同步需要用到packagist的Api token,查看token
提交配置
其他
报错Allowed memory size
php -d memory_limit=-1 C:/composer/composer.phar require xxx/xxx
composer指定php版本
/usr/local/php7/bin/php /usr/bin/composer create-project laravel/laravel
参考
官方中文文档:https://docs.phpcomposer.com/
如何安装 Composer:https://pkg.phpcomposer.com/#how-to-install-composer
这一次,真正掌握composer:https://www.jianshu.com/p/adcae6213e9b