composer使用说明

安装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

发表评论

邮箱地址不会被公开。 必填项已用*标注