PHP 之 Composer 新手入门指南
我敢肯定,现在有很多编码人员对使用作曲家的好处感到疑惑,并且还有很多人害怕去尝试新的工具。在本文中,我们将会了解 Composer 它到底是什么,它做了什么,为什么它是一个很棒的 PHP 开发工具。 首先,我们将更深入地了解依赖管理,然后安装 Composer。我们将大致了解一下它的基本用法,然后学习一些基础知识。现在我们开始吧! 什么是依赖管理?
安装 ComposerComposer 有各个系统的版本。 在 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 命令。这将把我所有的依赖引入到项目中,并做一些其他让代码整洁的事情。
到此为止,你已经可以开始使用您的依赖项了,但是我们还能做更多的事情来提高效率。让我们进一步学习 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,它会运行良好。另一种理解方式是使用 ~ 指定一个最小版本,但允许指定的最后一个数字增长。
插入符插入符范围用于允许所有非中断更新的情况。如果一个项目遵循语义版本控制,那么在小版本的更新中不应该破坏主版本的兼容性。也就是说,在你指定的该版本及以上的任何内容,不包括下一个主版本都不会破坏兼容性。它与 ~ 非常相似,但它更接近语义版本控制。通过指定 ^3.3.5,可以允许 3.3.5 及以上,但不包括 4.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 数组来完成的。 },"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架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新) ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |