专栏名称: 唤之
目录
相关文章推荐
OSC开源社区  ·  李彦宏:DeepSeek让我们明白要将最优秀 ... ·  2 天前  
OSC开源社区  ·  大模型训练中的开源数据和算法:机遇及挑战 ·  2 天前  
OSC开源社区  ·  敢自称Java版PyTorch,EasyAi ... ·  3 天前  
程序员的那些事  ·  字节用 8266.8 ... ·  6 天前  
51好读  ›  专栏  ›  唤之

重新介绍 Composer —— 现代化 PHP 应用的基石

唤之  · 掘金  · 程序员  · 2018-03-20 03:42

正文

这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍

在这篇文章中,我们将讨论Composer的一些的基础知识, 以及是什么使它成为一个如此强大而有力的工具。

在详细讨论之前,我们需要知道两件事:

  • Composer是什么:
正如我们在他们的 网站 上看到的那样: "Composer 是PHP依赖管理的工具. 它允许你声明你的项目所依赖的库并且它将为你管理(安装/更新) 它们."
  • Composer 不是什么:

Composer 不是包管理器. 它用"per project" 这种方式处理包.虽然它提供了一种全局安装选项 ,但默认情况下它不会在全局安装任何东西。

基本上, Composer 允许你声明和管理PHP项目中的每个依赖项.

现在就开始安装Composer ,这样我们就可以看到它了.

file 人来人往 翻译于 1个月前 0 重译

安装

安装 Composer 有两种方式:本地和全局。因为 Composer 是一个非常有用和广泛使用的工具,所以我总是建议在全局范围内安装它,因为您可能会同时在多个项目中使用它。

请注意,如果您使用 Homestead Improved 等环境,则默认情况下会全局安装。如果你对 Vagrant Homestead 不熟悉, 这篇文章 会帮你解决,如果你想深入研究下去,请看这本 this book will reveal some wild mysteries to you 。 要安装Composer,请按照 说明 获取您的操作系统。

如果你使用的是 Unix 系统,安装后你可以运行命令:

mv composer.phar/usr/local/bin/composer

这将 composer.phar 文件移动到路径上的一个目录(缺省情况下操作系统查找可执行文件的文件系统的位置)。这样,你可以使用 composer 命令而不是 composer.phar

monkey 翻译于 1个月前 0 重译 运行 composer 命令将会展示以下页面信息: file 一些有用的 composer 命令:
  • composer help <command> -- 显示给定命令的帮助页面.
  • composer self update -- 更新到最新的可用版本.
  • composer search -- 搜索依赖包.
  • composer status --显示一组本地被更新的依赖. 如果从源代码中安装一些 东西(用 --prefer-source 选择项), 最终我们将会在 /vendor 文件夹克隆该包. 如果我们修改了包信息, composer status 命令将会使用 git 展示这些修改.
  • composer diagnose -- 诊断系统的常见错误. 这对于调试非常有用, 因为它检查一些例如连接到包、可用磁盘空间和 git 的设置等.
我们将注意力集中在 composer init , composer create-project composer require . sane 翻译于 1个月前 0 重译

使用 Composer

在项目中管理依赖项, Composer 使用 json 格式文件. 这个文件描述了所有的依赖项, 并且也可以很好的存储一些元数据。 在这个例子中我们将会创建一个新的 PHP 项目并且使用 PHPUnit 用来做单元测试。 有下面的几种方法去使用 Composer 管理这些依赖。
  • composer init 将会启动向导。 这个向导会指导我们生成 composer.json 配置文件。

  • composer search phpunit 将会查找所有可以找到的包含 phpunit 关键字的包。 然后选择我们需要的包, 我们使用 composer require <package> 命令。 这个命令不仅会生成 composer.json 文件,它也会下载所有我们指定的依赖包。

  • 手工写 composer.json 文件 (不推荐 -- 很容易发生语法错误并且也不会来带好处). 下面是一个例子:
{
    "require": {
        "phpunit/phpunit": "^4.8"
    }
}
  • require 键包含这些包名 (例如 phpunit/phpunit ) 和约束版本号 (例如 4.8 ) 的包对象信息。 Composer 使用这些信息去你使用 repositories 键注册的 "包仓库 (repositories) " 中搜索正确的包 (更多信息请看 here ) 或 Packagist , 默认的包仓库我们在后面讨论。
M1racle 翻译于 1个月前 0 重译

查看其他 1 个版本

如果你使用 composer init 亦或者手动创建初始文件,你都需要执行 composer install 命令。这将下载 composer.json 文件中所有存在依赖关系的包。 请注意手动在 composer.json 中添加包并执行 composer install 与直接执行 composer require <package> 相同。

使用 composer require <package> 这种方法是推荐的 最佳实践 .

首次运行 composer install 命令时会下载与依赖关系相关的包,并将其安装的版本注册到 composer.lock 文件中。 下次有人在此项目执行 composer install , 它将不会去获取最新的可用包版本,而是通过寻找 composer.lock 中已经注册的版本进行安装。 通过这种方式, Composer可以确保您的项目不会因新版本软件包中意想不到的代码变更而报错。

canyuexiang 翻译于 1个月前 0 重译

更新你的软件包

composer.lock 文件通过不允许下载新版本的软件包来确保项目中的每个人都使用相同版本的软件包。 如果因为某种原因我们想要坚持使用一个特定的版本,那么我们应该在, composer.json 文件中添加你所需要的版本. 例如:
  {
      "require": {
          "phpunit/phpunit": "4.8"
      }
  }

但是,如果我们想要更新依赖包到最新的版本呢?

为了更新依赖,Composer提供了 composer update 命令。这个命令不仅会下载依赖包的最新版本,还会将 composer.lock 文件更新到最新的版本。运行 composer update 这个命令相当于删除 composer.lock 文件,然后重新运行 composer install 这个命令。

通常建议 composer.lock 文件在处理项目(应用程序)时将文件提交到版本控制系统,并且在处理程序包的时候忽略它。一个包应该总是努力使用最新版本的依赖,但是一个应用通常来说更为脆弱。关于这个和其他方法的讨论 在这里 .

zssen 翻译于 1个月前 0 重译

第三方插件文件夹

Composer 将所有依赖项下载到 /vendor 文件夹中, 如果该文件夹不存在. 它也创建了一个如下所示的 vendor/autoload.php 的文件:
<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit7a731d2067108a4739c3dd65be722f17::getLoader();
一旦你 include 或者 require 到你的文件的代码中, 你可以使用依赖包中所提供的所有功能。这与将下面的代码片段添加到你的代码中一样简单:
require __DIR__ . '/vendor/autoload.php';
zssen 翻译于 1个月前 0 重译

自动加载

Composer 提供的自动加载对于访问项目的依赖是非常有用的,也可以访问我们自己应用程序的代码。为此,我们需要注册我们的代码在 composer.json 文件中 ,使用这个 autoload 这个键
{
    "autoload": {
        "psr-4": {"Foo\\": "src/"}
    }
}
First, Composer 将注册一个 PSR-4 自动加载对象 对于 Foo 命名空间。 Then, 我们映射这个 Foo 命名空间到 /src 文件夹。这个 /src 文件夹应该位于与 /vendor 文件夹的同一级(项目的根目录)。After this,我们需要重新生成 vendor/autoload.php 这个文件, Composer 提供了一个命令 composer dump-autoload
  • 小提示: composer du 也能用, 因为 Composer 运行任何命令 ,确定的都是前几个字母,Composer 命名空间中没有 其他以 du 开头的命令,所以 Composer 知道那一个是我们想要的,这适合与所有的 Composer 命令。

这个方法我们将自己的代码添加到自动加载对象中,除了 PSR-4 自动加载, Composer也支持PSR-0,类映射和文件自动加载 。查看这个 文档 获取更多的信息关于Composer 的自动加载

岳池 翻译于 1个月前 0 重译

配置项 Minimum Stability(最低稳定性)

有时,你的项目将依赖一个没有稳定版本的包。Composer 默认会阻止不稳定的包被安装

在这种情况下,它是容易的去增加 minimum-stability 标签在 composer.json 文件中,然后 Composer 将会允许 不稳定包的安装
composer config minimum-stability dev
几乎所有的配置项都可以被编辑通过命令行,如 此文 所示。 岳池 翻译于 1个月前 0 重译

全局 Packages

一些包能够派上用场如果以全局的方安装。例如, Spress Laravel 有命令行工具来生成新的项目, 重新运行一些常见的命令。还有,一个测试工具,像 PHPUnit 可以从系统中的任何一个位置运行,并使得项目的测试更加轻松。 通常情况下,Packages 能够被全局安装通过这个 global 选项,
像这样:
composer global require phpunit/phpunit

我们大体上发现当遵循专业和现代的方法在 开发在一个独立的环境 中时, global require 是100%安全的。

岳池 翻译于 1个月前 0 重译

Packagist

file Packagist 是一个 Composer 主要的仓库。 这是所有 Compose包被聚在一起的地方,这便意味这当我们执行 composer search <package> 这个命令时,我们搜索的实际上是 Packagist。这个 Packagist 网站也提供所有软件包的信息和搜索排序引擎。这样 PHP 开发者就不用花费几天的时间去 Github 上寻找包了。

Packagisr 不仅仅汇集了所有的PHP包,它也鼓励 PHP 开发者提交他们自己的包在上面,不断的壮大这个社区。







请到「今天看啥」查看全文