一些PHP库可以在通过composer安装它们之后使用.
这是什么意思?
这是使用这些库的唯一方式,还是使用它们复制代码以纠正位置并在代码中引用它们的方法?
示例:可以使用mPDF (仅限?)通过作曲家https://mpdf.github.io/
可以使用PHPMailer在正确的位置复制文件并引用它们( https://github.com/PHPMailer/PHPMailer )。
发布于 2019-05-11 15:44:27
库的特点是,它们可能需要其他库,而那些库可能需要其他库等等。因此,下载它们并将它们放在某个位置将很繁琐,当两个库需要一个不同版本的相同库时,您会遇到问题。Composer将通过确定解决所有需求所需的库来解决此问题,并确保下载适合所有需求的版本,或引发当前库集合中包含不兼容库以及哪些库不兼容的错误。
另一个问题是找到存储这些库的正确位置,因为PHP必须确定每个类的存储位置,您必须将require/include语句添加到您的代码和库中,这很繁琐,并且会使将来的更新复杂化,例如当类被重命名或删除时。解决这一问题的方法之一是拥有一个共享的lib目录,但是当您有多个需要不同库版本的项目时,您会遇到问题。
对于库,composer是事实上的标准,您将始终需要/希望使用它在项目中安装库。它负责解决正确的版本,自动加载和更新,这使它非常有用,特别是当你还在的时候,作曲家不是一件事。我会使用它,即使我不需要库仅仅为了自动加载和以后添加库的能力,当我的项目增长/改变。
编辑:即使PHPMailer也提供了一个composer.json,尽管它不需要其他库,但是如果您通过composer安装它,您可以确保您的系统满足您可能错过的需求(扩展),从而可能导致一个很长的调试会话,找出某些特性不能工作的原因。
编辑,您也可以使用composer进行共享托管的项目。不必在服务器上运行命令,而是必须在本地计算机上运行命令,或者为实际服务器构建服务器。您可以将项目(包括供应商文件夹)复制到您的共享主机上,这样就可以工作了。供应商文件夹包含所有库和autoload.php,可以与代码一起复制。
为了可靠地做到这一点,可以在配置下的composer.json中指定运行代码的平台。您至少应该定义正确的PHP版本,但也应该定义已安装的扩展,以确保在没有所需扩展的情况下不会意外地安装库。当您运行composer install或composer update时,它将使用这些平台详细信息作为下载与它们匹配的库的基础。当您安装了PHP 7时,这一点尤其重要,但是您的主机还没有安装它。
与使用代码的服务器相比,在单独的服务器上运行composer时,有几个选项将不像--apcu-autoloader那样工作,但您可能不会使用它们。
如果您在本地计算机上运行composer并复制内容,则可以通过在编写器安装中添加几个选项来稍微改进体验:
composer install --no-dev --prefer-dist --classmap-authoritative您可以在文献资料中获得有关这些选项的详细信息。重要的是:
--no-dev,可能会减少下载到生产所需库的数量(因为我们只想在服务器上运行项目,而不是在服务器上开发)。--prefer-dist (为什么在文档中解释)--classmap-authoritative或--optimize-autoloader,(第一个可能不适用于某些项目/库),但它将改进自动加载,使您的应用程序在生产中稍微快一点。前两个选项,如果您复制您的开发环境,您不应该运行,因为它们不会为开发提供所有的依赖关系。可能会设置第二个项目,用于检查git中的最新更改,运行测试以确保一切正常运行,然后删除供应商&运行该命令(可能会对prod的配置进行一些更改),最后将内容复制到您的共享宿主环境中。如果您使用像gitlab这样的提供ci功能的工具,您也可以在ci服务器上执行这些步骤,并允许复制内容,但是设置起来需要一些时间。
https://stackoverflow.com/questions/56089544
复制相似问题