#Composer学习笔记
一、安装(MacOS)
系统要求:PHP5.3.2+以上版本
学习参考:Composer官方文档
Composer安装分两种:
1.局部安装
将composer.phar
文件内嵌于PHP应用目录下,命令如下:
1 | php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" |
以上命令分别做如下几件事件:
- 下载安装器
- 校验
- 执行安装
- 删除安装器
安装完成后,会在当前工作目录下生成可执行文件:composer.phar
,你可以通过如下方式使用(运行)composer来进行项目的依赖管理:
1 | php composer.phar <command> |
2.全局安装
将可执行二进制文件放在系统PATH路径下,命令如下:
1 | # 假设局部安装中生成的composer.phar文件在当前目录下 |
通过这种方式,你就可以直接按如下方式来使用composer:
1 | composer <command> |
二、基本概念
1. composer.json文件
每个基于Composer的项目都需要包含composer.json
文件,该文件用于声明项目所依赖的第三方库,其为JSON文件,格式类似:
1 | { |
require属性是用于声明依赖信息的地方。
当运行composer install
安装依赖时,Composer会将依赖库下载到项目根目录的vendor
目录下。如monolog依赖安装后,其存放在vendor\monolog\monolog
目录下。
2. composer.lock文件
当执行如下命令安装依赖后,Composer将会在项目目录下创建composer.lock
文件。
1 | composer install |
Composer将把安装时确切的版本号列表写入
composer.lock
文件。这将锁定改项目的特定版本。
后续再次运行composer install
时,Composer将先检查目录下是否有composer.lock
,若有则直接忽略composer.json
,而使用composer.lock
中的确切的版本信息。团队成员可以共享该lock文件以解决版本不一致问题。
当依赖版本有升级时,若想更新依赖至最新版本可以运行如下命令
1 | # 全部更新 |
3. 自动加载
对于库的自动加载信息,Composer 生成了一个vendor/autoload.php
文件。通过引入这个文件,就实现了自动加载功能。
1 | require 'vendor/autoload.php'; |
通过自动加载功能我们可以很容易的使用第三方代码。例如:项目依赖monolog,我们就可以像这样开始使用这个类库,并且他们将被自动加载。
1 | $log = new Monolog\Logger('name'); |
当然,我们也可以在composer.json
的autoload
字段中增加自己的autoloader
。
1 | { |
Composer将注册一个PSR-4 autoloader
到Acme
命名空间。
你可以定义一个从命名空间到目录的映射。此时src会在你项目的根目录,与vendor
文件夹同级。例如src/Foo.php
文件应该包含Acme\Foo
类。
添加autoload
字段后,你应该再次运行install
命令来生成 vendor/autoload.php
文件。
引用这个文件也将返回autoloader
的实例,你可以将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如:
1 | $loader = require 'vendor/autoload.php'; |
三、库
不重复造轮子,这是大伙天天喊的,因为社区已经为大伙提供了很多可直接引用的轮子,这些轮子的学名就叫“库”。如果你觉得自己的项目可以帮到别人,你可以选择将其打包成库,并大告天下。你只要按如下步骤操作就行:
- 为项目的composer.json添加name属性 [必需]
- 发布至git等版本管理系统或packagist
- composer.json中还有一个
version
属性,但一般不建议设置,因为composer会根据tag标签自行推算版本号,如果项目代码为master,则版本会被推算为dev-master
- packagist可理解为一个公共的组件仓库,类似maven中央库
- 对于未发布至packagist库的组件,引用方需要指定
repositories
比如,假如我们将项目发布至Github下,项目的composer.json
如下:
1 | { |
接下来,我们的另一个项目blog需要引用上面发布的simiam/composer-demo
组件,则blog项目的composer.json
内容如下:
1 | { |
因为我们发布的是master分支,所以
require
中依赖的版本号为dev-master
如果组件已经发布至packagist的话,则不需要声明repositories
,因为composer默认会从中央库中搜索。
更详细的信息,可以参考这里。
转载请注明出处:cloudnoter.com