composer原理
composer主要基于spl_autoload_register。
在执行了“composer install”后,composer先将在https://packagist.org/上依赖的包下载到vendor目录中,然后将所有依赖包的枚举写到vendor/composer/autoload_static.php中,再通过spl_autoload_register注册到SPL __autoload函数栈中即可。
composer.json添加模块
我们需要在 composer.json 文件中指定 require key 的值,以明确你的项目需要依赖哪些包。
- composer.json的最小demo
{
"require": {
"monolog/monolog": "1.0.*"
}
}
-
示例工程
- 加入对本工程其他目录下所有class的依赖
对ezSQL的依赖,则需要添加如下:
"name": "marsthink",
"description": "PHP class to make interacting with a database ridiculusly easy.",
"license": "LGPL",
"authors": [
{
"name": "Jamal Jo",
"email": "woshizmxin@163.com"
}
],
"autoload": {
"classmap": [
"ezSQL/"
]
}
}
- 加入对https://packagist.org/ 上的包的依赖
对monolog和jpush的依赖,修改如下:
{
"name": "marsthink",
"description": "PHP class to make interacting with a database ridiculusly easy.",
"license": "LGPL",
"authors": [
{
"name": "Jamal Jo",
"email": "woshizmxin@163.com"
}
],
"require": {
"monolog/monolog": "1.0.*",
"jpush/jpush": "v3.5.*"
},
"autoload": {
"classmap": [
"ezSQL/"
]
}
}
引用composer.json的库
根据composer.json,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件:
require 'vendor/autoload.php';
这使得你可以很容易的使用第三方代码。例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。
// index.php
require 'vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
composer.lock - 锁文件
请提交你应用程序的 composer.lock (包括 composer.json)到你的版本库中
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定改项目的特定版本。install 命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json 文件中的定义)。如果不存在,Composer 将读取 composer.json 并创建锁文件。
这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本。
修改镜像源
运行composer install时,有时候卡在Loading composer repositories with package information,此时需要更换镜像源头,方法如下:
- 方法一:修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- 方法二:修改当前项目的 composer.json
配置文件:
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户),进入你的项目的根目录(也就是 composer.json文件所在目录),执行如下命令:
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令将会在当前项目中的 composer.json文件的末尾自动添加镜像的配置信息(你也可以自己手工添加)
注意:
- 根据经验,每次部署代码时,由于工程内的依赖关系变化,建议先删除composer.lock,再运行composer install。
网友评论