PHP 之 Composer 新手入门指南
自2012年3月1日发布以来,Composer因提供了PHP迫切需要的东西:依赖项管理而广受欢迎。实际上,Composer是将所有第三方软件(例如CSS框架,jQuery插件等)引入你的项目的一种方法。
我敢肯定,现在有很多编码人员对使用作曲家的好处感到疑惑,并且还有很多人害怕去尝试新的工具。在本文中,我们将会了解 Composer 它到底是什么,它做了什么,为什么它是一个很棒的 PHP 开发工具。
首先,我们将更深入地了解依赖管理,然后安装 Composer。我们将大致了解一下它的基本用法,然后学习一些基础知识。现在我们开始吧!

什么是依赖管理?
依赖性管理实际上是一个非常简单的概念。假设您现在需要创建一个单页的网站,而你的 JavaScript 和 CSS 的需要用到 Foundation 框架。要如何将 Foundation 框架添加到项目中呢?
通常的方法是访问网站,下载软件包并将其放在项目中的某个位置。到目前为止,一切都很好。现在,当你想更新到最新版本时该怎么办?你重复同样的事情,覆盖旧版本。
假设这种情况持续了一段时间,你发现有些东西坏了。他们改变了Foundation的某些内容,现在你必须回滚,但是要去哪里呢?你需要找到较旧的版本并开始应用它们,直到找到合适的版本为止。
即使你能把这些都解决,那假设你现在开始着手别人的项目了,他们也使用 Foundation 吗?如果用了,它安装在哪里呢,它是什么版本呢?
对于一个小的项目来说,这些看起来并不是什么大问题,但是请想象一下一个拥有 8-10 个依赖(这仍然不算很多)的项目会怎样。模块化管理将变得不可能做到,或者至少是浪费时间的。
依赖管理通过自动化和标准化来解决这些问题。依赖的检索,如 Foundation、jQuery、Twig、Symphony、日志记录模块等等都可以通过以编程方式的方式来完成。还可以指定版本以防止冲突。
依赖管理器将包的存储方式和使用位置标准化。在实际应用中,这意味着每个使用相同依赖管理器的项目都将遵循相同的结构 —— 至少对于那些依赖是这样。
安装 Composer
Composer 有各个系统的版本。 在 Windows 系统,你可以通过 Composer Setup 文件来安装,安装包可以在这个页面 找到。 在基于 Linux 的系统, 包括 OSX,你可以在本地使用以下命令来安装:
curl -sS https://getcomposer.org/installer | php
在你的项目目录运行上面的命令,你会得到一个 composer.phar 文件,该文件可以用来运行 Composer。 我更喜欢全局安装,这样就可以在任何目录下运行 Composer 命令。全局安装需要运行以下命令::
mv composer.phar /usr/local/bin/composer
运行这个命令可能有两种情况会产生错误。 一个是你没有管理员权限,这时你可以在命令前面加 sudo 再运行。
sudo mv composer.phar /usr/local/bin/composer
另一个是,在 Yosemite 上运行, 因为没有 usr 目录, 这个命令会报错,这时只要创建相应的目录再次运行就好了。
Composer 简介
使用 Composer 进行依赖管理由两个独立的元素组成。第一个是 Composer 本身,它是用于获取和管理依赖项的命令行工具。第二个是 Packaginst —— 主要的 Composer 库,它是存储了你可能想要使用的包的地方。
使用 Composer 时,依赖管理的核心是一个名为 composer.json 的 JSON 文件。具体内容如下:
{
"name": "danielpataki/my_project",
"description": "My New Project",
"authors": [
{
"name": "Daniel Pataki",
"email": "mail@mymail.com"
}
],
"require": {
"monolog/monolog": "1.12.0"
}
}
你的项目想要引入的依赖将会列在 require 项中。在上述情况中,我引入了 Monolog,它是一个流行的日志记录框架。但是我仅有一个包含了这些信息的 JSON 文件并不意味着我就可以开始使用 Monolog 了。这时候就需要使用到命令行了。
使用命令行切换到项目文件夹中,然后输入 composer install 命令。这将把我所有的依赖引入到项目中,并做一些其他让代码整洁的事情。

它创建了一个 vendor 目录,该目录容纳了包括 Composer 在内的所有依赖项。截图中还显示了 Monolog 和 PSR,这是除 composer.lock 文件外 Monolog 的依赖项。
到此为止,你已经可以开始使用您的依赖项了,但是我们还能做更多的事情来提高效率。让我们进一步学习 Composer。
指定版本
在上面的代码中,我们指定了版本 1.12.0,但在某些情况下,我们可能希望得到更大的版本范围。有六种可以指定想要的版本的方法,让我们来看看它们:
版本范围
使用比较运算符,你可以获取高于 1.3 并且低于 1.8 的版本,或者使用 AND 和 OR 逻辑获取更复杂的版本集。使用的运算符可以是 >,<,>=,<= 和 !=。AND 逻辑用空格或逗号表示,OR 逻辑用双竖线表示:||。
指定 >2.7 表示高于 2.7 的任意版本。>2.7 <=3.5 则表示高于 2.7 并低于 3.5(包括 3.5)的任何版本。
通配符版本
通过使用通配符,你可以指定版本的模式。例如 2.3.*,它表示包括 2.3.0 及以上并且低于 2.4.0 (不包括 2.4.0)的所有版本。它等价于 >=2.3.0 <2.4。
连字符范围
使用连字符能让你更容易地指定版本范围,但是它对于版本的特殊处理方式容易让人感到疑惑。一个完整的版本由三个数字组成,在这种情况下连字符范围是完全合理的。
2.0.0 - 3.0.0 连字符范围表示所有 2.0.0 以上并且在 3.0.0 以下的版本(包括了 2.0.0 和 3.0.0)都将被接受,等同于 >=2.0.0 <=3.0.0。
但是如果只指定了部分的版本号,如 2.0 - 3.0,意味着任何高于 2.0 的版本(包括 2.0)但低于 3.1 版本。
这种看似奇怪的行为是因为连字符左侧是包含的,右侧则会使用通配符进行补全。上面的表达式等同于 >=2.1 ️.1.0
波浪号范围
~ 运算符可以很好地标记你所依赖的最小次要版本,并允许任何高于此版本内容,但不包括下一个主要版本。如果你指定 ~3.6,那么你将允许 3.6 及其以上的版本,但不包括 4.0 版本。
~ 运算符最好用示例解释:~3.6 等价于 >=3.6 <4.0.0,而 ~3.6.3 等价于 >=3.6.3 ️.7.0。正如你所看到的,它对于尊重 语义版本控制的项目来说是非常有用的。因为理论上应该没有向后兼容性破坏直到 4.0,它会运行良好。另一种理解方式是使用 ~ 指定一个最小版本,但允许指定的最后一个数字增长。
注意: 虽然 4.0-beta.1 是在 4.0 之前,但版本约束,如 ~3.6 不会安装它。正如上面所说的 ~3.6 只意味着 .6 可以改变,但 3. 部分是固定的。
注意: ~ 运算符对其主要发行号的行为有例外。这意味着,~1 与 ~1.0 是相同的,因为它不会允许主数字增加以试图保持向后兼容性。
插入符
插入符范围用于允许所有非中断更新的情况。如果一个项目遵循语义版本控制,那么在小版本的更新中不应该破坏主版本的兼容性。也就是说,在你指定的该版本及以上的任何内容,不包括下一个主版本都不会破坏兼容性。它与 ~ 非常相似,但它更接近语义版本控制。通过指定 ^3.3.5,可以允许 3.3.5 及以上,但不包括 4.0 以上的版本。
注意: 主版本号为零(0.y.z)的软件处于开发初始阶段,一切都可能随时被改变,这样的版本被视为不稳定版。为了保证兼容,^ 将不会更新到下一个小版本,如 ^0.3.0 等于 >=0.3.0 <0.4.0 而不是 >=0.3.0 <1.0.0。
Dev-Master
通过指定 dev-master,你将获取当前开发的最新版本,该版本尚未标记版本号。这在开发过程中可能很好,但你需要知道,在这些版本中,bug 的可能性更高。
锁
依赖的锁定是 Composer 最有用的特性之一。我在前面提到过 composer.lock 文件,这个文件的作用就是是锁定所用组件的版本。
锁定文件可以确保每个人都使用着相同版本的文件。仅仅因为应用程序不应该由于组件更新而中断,并不意味着团队中所有的成员和生产服务器都应该运行不同的版本。
当你第一次使用 Composer 获取依赖项时,它会将确切的版本写入锁文件。如果指定了 2.3.* 版本,并且 2.3.5 是当时最新版本,则会安装 2.3.5 版本并将其记录在锁定文件中。
假设一个开发人员在 10 天后加入团队。这时,版本已经更新为 2.3.6。如果他使用正确的命令 (composer install),他将会安装 2.3.5 版本,因为它已记录在锁文件了。
当然,你依然可以更新依赖项。在这种情况下,你应该运行 composer update 命令。这将获取允许的最新版本并将其写入锁文件。然后将它分发给其他人,让他们更新版本。
开发依赖
Composer 允许你指定开发依赖。这是通过在 require-dev 数组中指定你的依赖而不是 require 数组来完成的。
{
"name": "danielpataki/my_project",
"description": "My New Project",
"authors": [
{
"name": "Daniel Pataki",
"email": "mail@mymail.com"
}
],
"require": {
"monolog/monolog": "1.12.0"
},
"require-dev" : {
"fzaninotto/faker", "dev-master"
}
}
Faker 是一个生成假数据的 PHP 类。这对开发很有用但对生产来说并不需要。
请注意,默认情况下始终会安装开发依赖,Composer 不会神奇地知道它何时在生产服务器上运行。如果要排除开发依赖,则需要运行 install 或者 update 命令时加上 --no-dev 选项
Composer 现状
Composer 在 PHP 开发中随处可见。 几乎所有大型和知名的网站组件,如 jQuery,Foundation,Bootstrap,甚至 WordPress 都有一个 Composer 包。
此外,较小但同样好用的代码包也可以通过 Composer 检索到。 如 Monolog 这样的日志记录包,PHP 邮件管理包,字符串操作类,PHP 单元和其他工具等等。
框架社区从 Composer 统一项目需求的能力中获益匪浅。 备受青睐的 Laravel,FuelPHP,Yii Framework 等框架都依靠 Composer 将功能整合并共享给其他项目。
当然最大的好处是不易察觉的。当你需要共享或部署代码时,Composer 非常好用。你不需要把大约 20-50MB 的相关但未使用的代码拖来拖去。你只需将它们写入 composer.json 和 lock 文件中,所有人都能在几分钟内得到同样的页面了。
结论
我希望我已经让你对 Composer 强大的功能有所了解,但其实你还能使用它来做更多的事情。除了我们讨论的内容之外,Composer 还为你提供了出色的自动加载功能,你可以将脚本挂接到更新过程的任何步骤等等。
任何小组项目都应该使用 Composer,但即使你单独工作,它还是非常实用的。它给你提供了很大的灵活性,并且给你的项目提供了不会过时的技术 ——你永远不知道什么时候你可能需要额外的帮助!
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,进阶PHP月薪30k>>>架构师成长路线【视频、面试文档免费获取】
PHP 之 Composer 新手入门指南的更多相关文章
- Flume NG Getting Started(Flume NG 新手入门指南)
Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...
- OKR新手入门指南 (第一部分)
什么是OKR? OKR(目标和关键结果)是Google和其他公司使用的目标系统.这是一个简单的工具,围绕可衡量的目标进行调整和互动. OKR:Google的目标设定方法 与传统的规划方法有何不同? O ...
- NLP新手入门指南|北大-TANGENT
开源的学习资源:<NLP 新手入门指南>,项目作者为北京大学 TANGENT 实验室成员. 该指南主要提供了 NLP 学习入门引导.常见任务的开发实现.各大技术教程与文献的相关推荐等内容, ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- Vue的理解:Vue.js新手入门指南----转
最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...
- Vue.js新手入门指南
最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...
- Wintel物联网平台-Windows IoT新手入门指南
1. 引言 近期,微软跟进物联网的速度也在不断加速,除了微软手环,.NET MicroFramework,还有一个叫做Windows IoT的项目.该项目早在今年4月份的Build大会上就提出来了,7 ...
- 新手入门指导:Vue 2.0 的建议学习顺序
起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...
- 【翻译】Fluent NHibernate介绍和入门指南
英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...
随机推荐
- cmder安装(window下好用的终端)
cmder下载地址:cmder官网 安装步骤: 下载cmder(cmder官网)并解压缩 配置环境变量 先配置CMDER_HOME(cmder.exe所在目录) 配置path:%CMDER_HOME% ...
- Python 读取Excel之xlrd篇
上一期给大家分享了如何用Python读取文本,这次给大家分享如何读取Excel表格内容,拿最常见的.xlsx和.xls格式来讲解. 本章主要知识点有: 读取整篇excel返回list[list[lis ...
- JVM 专题十三:运行时数据区(八)直接内存
1. 直接内存 不是虚拟机运行时数据区的一部分,也不是<Java虚拟机规范>中定义的内存区域. 直接内存是Java堆外的.直接向系统申请的内存区间. 来源于NIO,通过存在堆中的Direc ...
- 数据可视化之powerBI基础(一) 如何查看PowerBI图表背后的数据
https://zhuanlan.zhihu.com/p/64405494 图表很直观,但有时候我们不仅想看图,也想更进一步查看生成该图表的明细数据,在PowerBI中有三种方式. (一)在图表上单击 ...
- 数据分析06 /pandas高级操作相关案例:人口案例分析、2012美国大选献金项目数据分析
数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 目录 数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 1. ...
- Linux01 /Linux初识
Linux01 /Linux初识 目录 Linux01 /Linux初识 1. 服务器 2. Linux系统介绍 3. linux简单介绍 4. VMware与Centos系统安装 5. 各个连接协议 ...
- Linux驱动之I2C总线设备以及驱动
[ 导读] 本文通过阅读内核代码,来梳理一下I2C子系统的整体视图.在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,导致没有一个清晰的思路.所以从高层级来分析一下I2C系统的设计思路,将有助于 ...
- oop的三种设计模式(单例、工厂、策略)
参考网站 单例模式: 废话不多说,我们直接上代码: <?php /** 三私一公 *私有的静态属性:保存类的单例 *私有的__construct():阻止在类的外部实例化 *私有的__clone ...
- Python实现性能自动化测试的方法【推荐好文】
1.什么是性能自动化测试? ◆ 性能 △ 系统负载能力 △ 超负荷运行下的稳定性 △ 系统瓶颈 ◆ 自动化测试 △ 使用程序代替手工 △ 提升测试效率 ◆ 性能自动化 △ 使用代码模拟大批量用户 △ ...
- Andriod 自动化环境搭建
一.安装JDK,配置JDK环境 百度搜索下载就行,这里分享一个下载链接:https://pan.baidu.com/s/1snuTOAx 密码:9z8r. 下载好后点击进行安装.安装好后进行环境 ...