Composer入门教程 - 基本用法
Composer入门教程 - 基本用法
- 基本用法
- 安装
composer.json
:项目安装- 关于
require
Key - 包名称
- 包版本
- 下一个重要版本(波浪号运算符)
- 稳定性
- 关于
- 安装依赖包
composer.lock
- 锁文件- Packagist
- 自动加载
安装
安装 Composer,你只需要下载 composer.phar
可执行文件。
curl -sS https://getcomposer.org/installer | php
详细请查看 简介 章节。
要检查 Composer 是否正常工作,只需要通过 php
来执行 PHAR:
php composer.phar
这将返回给你一个可执行的命令列表。
注意: 你也可以仅执行
--check
选项而无需下载 Composer。 要获取更多的信息请使用--help
。curl -sS https://getcomposer.org/installer | php -- --help
composer.json
:项目安装
要开始在你的项目中使用 Composer,你只需要一个 composer.json
文件。该文件包含了项目的依赖和其它的一些元数据。
这个 JSON format 是很容易编写的。它允许你定义嵌套结构。
关于 require
Key
第一件事情(并且往往只需要做这一件事),你需要在 composer.json
文件中指定 require
key 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。
{"require": {"monolog/monolog": "1.0.*"}
}
你可以看到, require
需要一个 包名称 (例如 monolog/monolog
) 映射到 包版本 (例如 1.0.*
) 的对象。
包名称
包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为 json
的库,而之后它们将被命名为 igorw/json
和 seldaek/json
。
这里我们需要引入 monolog/monolog
,供应商名称与项目的名称相同,对于一个具有唯一名称的项目,我们推荐这么做。它还允许以后在同一个命名空间添加更多的相关项目。如果你维护着一个库,这将使你可以很容易的把它分离成更小的部分。
包版本
在前面的例子中,我们引入的 monolog 版本指定为 1.0.*
。这表示任何从 1.0
开始的开发分支,它将会匹配 1.0.0
、1.0.2
或者 1.0.20
。
版本约束可以用几个不同的方法来指定。
名称 | 实例 | 描述 |
---|---|---|
确切的版本号 |
1.0.2
|
你可以指定包的确切版本。 |
范围 |
>=1.0 >=1.0,<2.0 >=1.0,<1.1|>=1.2
|
通过使用比较操作符可以指定有效的版本范围。 有效的运算符: > 、>= 、< 、<= 、!= 。你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号 | 将作为逻辑OR处理。AND 的优先级高于 OR。 |
通配符 |
1.0.*
|
你可以使用通配符* 来指定一种模式。1.0.* 与>=1.0,<1.1 是等效的。
|
赋值运算符 |
~1.2
|
这对于遵循语义化版本号的项目非常有用。~1.2 相当于>=1.2,<2.0 。想要了解更多,请阅读下一小节。
|
下一个重要版本(波浪号运算符)
~
最好用例子来解释: ~1.2
相当于 >=1.2,<2.0
,而 ~1.2.3
相当于 >=1.2.3,<1.3
。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 ~1.2
(允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用 ~
指定最低版本,但允许版本号的最后一位数字上升。
注意: 虽然
2.0-beta.1
严格地说是早于2.0
,但是,根据版本约束条件, 例如~1.2
却不会安装这个版本。就像前面所讲的~1.2
只意味着.2
部分可以改变,但是1.
部分是固定的。
稳定性
默认情况下只有稳定的发行版才会被考虑在内。如果你也想获得 RC、beta、alpha 或 dev 版本,你可以使用 稳定标志。你可以对所有的包做 最小稳定性 设置,而不是每个依赖逐一设置。
安装依赖包
获取定义的依赖到你的本地项目,只需要调用 composer.phar
运行 install
命令。
php composer.phar install
接着前面的例子,这将会找到 monolog/monolog
的最新版本,并将它下载到 vendor
目录。 这是一个惯例把第三方的代码到一个指定的目录 vendor
。如果是 monolog 将会创建 vendor/monolog/monolog
目录。
小技巧: 如果你正在使用Git来管理你的项目, 你可能要添加
vendor
到你的.gitignore
文件中。 你不会希望将所有的代码都添加到你的版本库中。
另一件事是 install
命令将创建一个 composer.lock
文件到你项目的根目录中。
composer.lock
- 锁文件
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock
文件。这将锁定改项目的特定版本。
请提交你应用程序的 composer.lock
(包括 composer.json
)到你的版本库中
这是非常重要的,因为 install
命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json
文件中的定义)。
这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本。
如果不存在 composer.lock
文件,Composer 将读取 composer.json
并创建锁文件。
这意味着如果你的依赖更新了新的版本,你将不会获得任何更新。此时要更新你的依赖版本请使用 update
命令。这将获取最新匹配的版本(根据你的 composer.json
文件)并将新版本更新进锁文件。
php composer.phar update
如果只想安装或更新一个依赖,你可以白名单它们:
php composer.phar update monolog/monolog [...]
注意: 对于库,并不一定建议提交锁文件 请参考:库的锁文件.
Packagist
packagist 是 Composer 的主要资源库。 一个 Composer 的库基本上是一个包的源:记录了可以得到包的地方。Packagist 的目标是成为大家使用库资源的中央存储平台。这意味着你可以 require
那里的任何包。
当你访问 packagist website (packagist.org),你可以浏览和搜索资源包。
任何支持 Composer 的开源项目应该发布自己的包在 packagist 上。虽然并不一定要发布在 packagist 上来使用 Composer,但它使我们的编程生活更加轻松。
自动加载
对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php
文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。
require 'vendor/autoload.php';
这使得你可以很容易的使用第三方代码。例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));$log->addWarning('Foo');
你可以在 composer.json
的 autoload
字段中增加自己的 autoloader。
{"autoload": {"psr-4": {"Acme\\": "src/"}}
}
Composer 将注册一个 PSR-4 autoloader 到 Acme
命名空间。
你可以定义一个从命名空间到目录的映射。此时 src
会在你项目的根目录,与 vendor
文件夹同级。例如 src/Foo.php
文件应该包含 Acme\Foo
类。
添加 autoload
字段后,你应该再次运行 install
命令来生成 vendor/autoload.php
文件。
引用这个文件也将返回 autoloader 的实例,你可以将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如。
$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);
除了 PSR-4 自动加载,classmap 也是支持的。这允许类被自动加载,即使不符合 PSR-0 规范。详细请查看 自动加载-参考。
注意: Composer 提供了自己的 autoloader。如果你不想使用它,你可以仅仅引入
vendor/composer/autoload_*.php
文件,它返回一个关联数组,你可以通过这个关联数组配置自己的 autoloader。
← 简介 | 库(资源包) →
如果您发现文档中有错误,或者能够帮我们完善文档,请提交到我们的 Github 仓库吧!
Composer 以及本网站上的所有内容全部遵循 MIT 开源协议。
Composer入门教程 - 基本用法相关推荐
- 数模matlab入门教程-001-xlsread用法
数模matlab入门教程-001 1.函数介绍 2.数据读入 3.后续内容 数模要开始了,整理了一些基本资料提供给没有基础的同学.本文以2017届D题为例,21天数学建模从入门到精通. 这个题目可以在 ...
- C语言入门之指针用法教程
C语言入门之指针用法教程 这篇文章主要介绍了C语言入门之指针用法教程,主要对C语言中指针的本质及常见用法做了较为通俗易懂的分析,是后续深入学习C语言的基础,需要的朋友可以参考下 undefined u ...
- composer 依赖包版本冲突_composer快速入门教程
php中文网最新课程 每日17点准时技术干货分享 Composer 是 PHP 的一个依赖管理工具.我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库文件,有了它,我们就 ...
- Linux Shell脚本入门教程系列之(九)Shell判断 if else 用法
本文是Linux Shell脚本系列教程的第(九)篇,更多shell教程请看:Linux Shell脚本系列教程 判断语句是每个语言都必不可少的关键语法,Shell命令当然也不例外.继上一篇之后,今天 ...
- commander入门教程及高级用法
简介 commander是一个轻巧的nodejs模块,提供了用户命令行输入和参数解析强大功能 安装 cnpm i -S commander 最小力度的脚手架 入门教程及高级用法 // 注册命令:com ...
- Android基础入门教程——1.7 界面原型设计
Android基础入门教程--1.7 界面原型设计 标签(空格分隔): Android基础入门教程 本节引言: 引用锤子科技视觉设计总监--罗子雄在重庆TEDx活动上说的一小段话: 每当我们看到一些美 ...
- 献给初学者-DSP入门教程【转】
献给初学者-DSP入门教程 helloDSP论坛 前言:此资料也是来源于网络,并不是我们原创,但是希望这些资料能够给初学DSP的 朋友们一点帮助,也希望你们能够把这里当成是你们学习DSP技术的一个家园 ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- 人人都能看懂的 Python 装饰器入门教程
大家好,我是萱萱! 之前的文章中提到,很多人认为理解了装饰器的概念和用法后,会觉得自己的 Python 水平有一个明显的提高. 但很多教程在一上来就会给出装饰器的定义以及基本用法,例如你一定会在很多文 ...
最新文章
- juniper防火墙做ipsec ***必须开放的端口
- php extension 安装,php + clucene extension的安装
- c语言邻接表的构建_C++实现有向图邻接表的构建
- 蓝桥杯之第几个幸运数
- AVS 分像素运动估计优化算法
- LeetCode 1913. 两个数对之间的最大乘积差
- JavaScript面向对象:类、方法、属性
- 有了门面,程序会更加体面!- pos软件基于三层架构 -09
- [BZOJ4756]Promotion Counting
- 二分类数据集_玩转UCI心脏病二分类数据集 领学课笔记
- win查看GPU信息
- Wendy Shijia 的「 Escher‘s Gallery」可视化作品复现系列文章(三)
- 构建高可用MYSQL主从复制集群
- kaldi-关键词识别kws
- 陈丹青版画作品首次元宇宙拍卖明日揭幕!
- “古董级” 诺基亚功能机跑Linux是怎样的画风?
- ICML 2022|达摩院多模态模型OFA,实现模态、任务和架构三个统一
- 华为网络工程师项目模拟
- jsDOM编程-小球在盒子里来回撞击
- mysql匿名用户grant_mysql 建库报匿名用户权限错误
热门文章
- U盘无法拷贝4G以上的文件
- NFS(网络文件系统)
- 使用ES Rally出错:certificate verify failed: self signed certificate in certificate chain
- 数据结构(二十一)——图和图的应用
- Linux命令: cd - 返回上次所在的目录
- Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout
- liblinear相关学习
- 为了进大厂,韩顺平高级Java教程百度云
- python画人脸肖战_立个flag,蒋凡即将离开程序猿.肖战战:阿里?一刀10…
- 秒懂云通信:短信也能玩出新花样?听阿里云产品运营畅聊“智能消息”服务