通过composer安装后,可以使用某些PHP库。
这是什么意思?
是使用这些库的唯一方法,还是使用它们将代码复制到正确的位置并在代码中引用它们的方法?
示例: mPDF可以通过作曲家使用(仅?) https://mpdf.github.io/
仅可在正确的位置复制文件并引用它们时使用PHPMailer https://github.com/PHPMailer/PHPMailer
答案 0 :(得分:1)
使用库的问题是,它们可能需要其他库,而这些库可能需要其他库,依此类推。因此,下载它们并将它们放置在某个位置将很繁琐,并且当两个库需要相同版本的同一库时,您会遇到问题。 Composer将通过找出解决所有需求所需的库并确保下载适合所有需求的版本,或者引起错误,指出当前库集合包含不兼容的库以及哪些库不兼容,从而为您解决了此问题。
另一个问题是找到正确的位置来存储这些库,因为PHP必须弄清楚每个类的存储位置,您要么必须在代码和库中添加require
/ include
语句,繁琐,会使将来的更新复杂化,例如重命名或删除类时。解决此问题的方法是拥有一个共享的lib目录,但是当您有多个需要不同库版本的项目时,就会遇到问题。
对于库来说,composer是事实上的标准,您将始终需要/想要将库与其一起安装在项目中。它会解决正确的版本,自动加载和更新的问题,从而使它变得异常有用,尤其是当您还没有成为作曲家的时候。即使我的项目增长/更改时,即使我不需要库就仅用于自动加载和以后添加库的功能,我也将使用它。
edit:即使PHPMailer也提供了composer.json,尽管它不需要其他库,但是如果您通过composer安装,则可以确保系统满足要求(PHP版本和已安装的扩展名)否则您可能会错过,导致可能花费很长时间进行调试,以弄清楚为什么某些功能无法正常工作。
编辑,您也可以将composer用于共享主机上的项目。您必须在本地计算机上运行该命令或为实际服务器构建 服务器,而不是在服务器上运行命令。您可以将您的项目(包括供应商文件夹)复制到共享主机,一切正常。供应商文件夹包含所有库和autoload.php
,并且可以与您的代码一起复制。
为了可靠地执行此操作,请在您的composer.json中的config下,您可以指定platform来运行代码。您至少应定义正确的PHP版本,但也应定义已安装的扩展名,以确保不会在没有所需扩展名的地方意外安装库。当您运行composer install
或composer update
时,它将使用这些平台详细信息作为下载与它们匹配的库的基础。当您安装了PHP 7,但是您的主机还没有安装PHP 7时,这一点尤其重要。
在与使用代码的服务器不同的服务器上运行composer时,一些选项将无法像--apcu-autoloader
一样工作,但您可能始终不会使用它们。
如果您在本地计算机上运行composer并复制内容,则可以通过在composer安装中添加一些选项来改善体验:
composer install --no-dev --prefer-dist --classmap-authoritative
您可以在the documentation中获取有关这些选项的详细信息。重要的事情是:
--no-dev
,以便将下载的库数量减少到生产所需的库数量(因为我们只想在服务器上运行项目而不在其上开发)。--prefer-dist
(为什么在文档中进行了说明)--classmap-authoritative
或--optimize-autoloader
,(第一个可能不适用于某些项目/库),但它将改善自动加载,使您的应用程序变得小巧,生产速度也快一点。前两个选项,如果复制开发环境,则不应运行,因为它们不会提供开发的所有依赖关系。也许设置第二个项目,该项目仅用于从git中签出最新更改,运行测试以确保一切正常,然后删除供应商并运行该命令,(可能对产品的配置进行一些更改),最后将其复制到您的共享托管环境。如果您使用诸如gitlab之类的工具提供CI功能,则也可以在ci服务器上执行以下步骤并复制内容,但设置起来会花费一些时间。