这是一篇社区协同翻译的文章, 已完成翻译, 更多信息请点击 协同翻译介绍
在这篇文章中, 我们将讨论 Composer 的一些的基础知识, 以及是什么使它成为一个如此强大而有力的工具
在详细讨论之前, 我们需要知道两件事:
Composer 是什么:
正如我们在他们的 网站上看到的那样: "Composer 是 PHP 依赖管理的工具. 它允许你声明你的项目所依赖的库并且它将为你管理(安装 / 更新) 它们."
Composer 不是什么:
Composer 不是包管理器. 它用 "per project" 这种方式处理包. 虽然它提供了一种全局安装选项 , 但默认情况下它不会在全局安装任何东西
基本上, Composer 允许你声明和管理 PHP 项目中的每个依赖项.
现在就开始安装 Composer , 这样我们就可以看到它了.
人来人往 翻译于 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 命令将会展示以下页面信息:
一些有用的 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
Packagist 是一个 Composer 主要的仓库 这是所有 Compose 包被聚在一起的地方, 这便意味这当我们执行
composer search <package>
这个命令时, 我们搜索的实际上是 Packagist 这个 Packagist 网站也提供所有软件包的信息和搜索排序引擎这样 PHP 开发者就不用花费几天的时间去 Github 上寻找包了
Packagisr 不仅仅汇集了所有的 PHP 包, 它也鼓励 PHP 开发者提交他们自己的包在上面, 不断的壮大这个社区
岳池 翻译于 1 个月前 0 重译
提交一个 Package 向 Packagist
让我们创建一个简单的 PHP 包, 这样我们能了解向 Packagist 提交是多么容易 我们将创建一个简单的类实现英寸和厘米之间的转换, 让我们创建一个
/src/Converter/Converter.php
文件 在这个文件中, 写下如下代码
- <?php
- namespace Converter;
- class Converter
- {
- public function convertToCm($value)
- {
- return $value * 0.3937;
- }
- public function convertToInch($value)
- {
- return $value * 2.54;
- }
- }
如你所见, 一个简单的类接下来进入我们项目的根目录并且运行 composer init 命令去运行向导和生成 compoer.json 文件
这个最后的事情我们需要增加 autoload 键在我们的 composer.json 文件里这个最后的文件看起来应该是这样
- {
- "name": "dailymatters/inch-conv",
- "description": "Inch To Cm converter",
- "type": "library",
- "license": "creative commons",
- "authors": [
- {
- "name": "DailyMatters",
- "email": "email@gmail.com"
- }
- ],
- "minimum-stability": "dev",
- "require": {},
- "autoload": {
- "psr-0": {
- "Converter": "src/"
- }
- }
- }
岳池 翻译于 1 个月前 0 重译 现在让我们来运行 composer install 以便我们的自动下载器可以被创建好接着, 让我们测试一下软件包在我们项目的根目录, 让我们创建一个 index.php 文档.
- <?php
- require_once '/vendor/autoload.php';
- use Converter\Converter;
- $conv = new Converter;
- $result = $conv->convertToCm(1);
- echo $result;
- $result = $conv->convertToInch(1);
- echo $result;
正如你可以看到的, 我们是在使用
require_once '/vendor/autoload.php';
那一行来加载我们的类, 然后用它来做一些转换. 运行 php index.php 在指令行测试便会产生你想要的结果.
为了将该软件包提交到 Packagist, 我们需要把它推到一个 Github 存储库然后, 我们使用自己的 Github 帐号来注册 Packagist, 再点击 Submit, 并显示出我们最新创建的 GitHub 存储库所在位置.
记得一定要随时更新 Packagis 只要你更新你的 GitHub 里的存储库! 您既可以将 Packagist 配置成自动更新, 也可以访问自己的 Packagist 上的软件包并点击 Update 按钮这样, 你 Packagist 里的软件包将一直显示出自己的软件包里的 GitHub 状态
来源: https://juejin.im/entry/5ab083276fb9a028cb2d746e