1. 什么是Composer
Composer是PHP中用于管理依赖性(dependency)的工具。它允许您在项目中声明所需的库,然后Composer会自动处理安装它们的依赖性并确保它们在正常运行时可用。
Composer可以安装来自Packagist的软件包,这是一个PHP程序包的默认存储库。此外,Composer还能够安装来源于其他源的软件包。Composer的配置文件名为composer.json,其中定义了该项目所需的依赖关系和其他有关项目的元数据。
2. 如何使用Composer
2.1 Composer的安装和配置
在使用Composer之前,您需要在系统上安装它。安装过程与任何其他PHP应用程序相同,您可以从官方网站或从GitHub存储库下载最新版本。安装完成后,请确保将Composer添加到您的系统路径以便全局使用。
在安装Composer之后,你需要配置它可以访问Packagist或其他源。通常您只需将packagist.org添加为主要源即可,如果您需要从其他源获取依赖项,可以在composer.json文件中添加配置。
{
"repositories": [
{
"type": "composer",
"url": "https://packages.example.com"
}
]
}
2.2 依赖的管理
在使用Composer时,需要在我的项目目录中创建composer.json文件。在此文件中,您可以指定所需的库,让Composer自动处理以及安装或升级它们。这里是一个简单的composer.json文件示例:
{
"require": {
"monolog/monolog": "^1.0"
}
}
这个文件中指定了需要的库 “monolog/monolog”,同时指定了版本1.0及以上。
当你使用Composer安装依赖时,它将检查每个安装的软件包并下载需要的依赖项。然后,这些依赖关系将作为软件包的一部分安装,并在您的项目中自动使用。
3. 我们的生产环境
3.1 我们在生产环境中使用Composer做什么?
我们在生产环境中使用Composer是为了高效地管理依赖性并在系统变更时轻松地更新所需的 PHP软件包。为了满足此要求,我们会在自己的部署系统上创建一个composer.json文件,并在每个PHP项目中指定所需的库。
3.2 我们的composer.json文件是如何组织的?
我们的composer.json文件中包含了项目的所有依赖性,这些依赖性列表在生产环境中可以通过Composer进行安装。为了提高性能和避免无法预测的依赖项错误,我们锁定所有的依赖项并规定要安装时的具体版本。下面是我们的composer.json文件的例子:
{
"name": "example-application",
"description": "This is an example application",
"require": {
"php": "^7.1.3",
"ext-ctype": "*",
"ext-iconv": "*",
"ext-json": "*",
"ext-mbstring": "*",
"ext-session": "*",
"fideloper/proxy": "^4.2",
"laravel/framework": "5.8.*",
"laravel/tinker": "^1.0"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.2",
"filp/whoops": "^2.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^8.5"
},
"autoload": {
"psr-4": {
"Example\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"scripts": {
"post-autoload-dump": [
"@php artisan package:discover --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
}
}
我们定义了项目名称、描述以及所需的库和其他元数据。有必要指定PHP的最低版本需要7.1.3或更高版本,并定义了必须的 PHP扩展。在“require”下,我们列出了生产环境下我们希望使用的软件包和其版本。我们还包括了其他的配置和自动加载指令。
3.3 Composer的生产环境最佳实践
如果你想更好地使用Composer,以下是一些在生产环境中使用Composer的最佳实践:
1. 锁定所有依赖性:在项目的composer.json文件中尽可能指定依赖项的版本或版本范围,并锁定所有依赖项的版本。这样可以确保防止在将来某个时点发生意外更改。
2. 使用包本机函数:在PHP代码中尽可能使用Composer软件包本身的功能,而不是手动编写代码。这样可以最大程度地利用软件包开发人员的经验,并减少自己的工作量。
3. 优化自动加载:在Composer的配置文件中,可以进行一些自动加载优化,例如将手动注册的类映射到PSR-4或PSR-0目录。这样可以减少自动加载的工作量并提高应用程序性能。
4. 更新依赖的安全:Composer可以检查你们项目的依赖版本是否存在安全漏洞。如果检测到问题,您可以使用 Composer提供的指令来更新依赖项以修复此类漏洞。
5. 导出依赖列表:最后,尽管使用Composer处理依赖关系非常方便,但有时我们可能需要一个列表,来记录当前应用程序正在使用的所有依赖项及其版本。可以使用Composer指令来生成此列表,以方便监控和记录。
4. 总结
使用Composer来管理 PHP应用程序的依赖关系是一个非常方便且高效的方法。不管您是一个个人开发人员还是一家企业,都可以让您的代码最大化利用PHP生态系统中的工具和库。在使用 Composer时,请遵循最佳实践,并确保在生产环境中锁定依赖项以及其他建议的配置。