我有一个普通的PHP项目,它使用composer来安装软件包,但composer.json文件已经不存在了。vendor文件夹包含所有当前使用的软件包和autoload.php文件。
现在我需要安装并使用aws package,但是一旦我运行composer require命令,所有旧的软件包都会从供应商那里删除。当我从备份中恢复它们时,它们无法工作。应用程序不再识别它们。
如何在这种情况下使用aws包或任何其他包?
define('ROOT_PATH', realpath(__DIR__ . '/..') . '/');
const APP_PATH = ROOT_PATH . 'app/';
const PLUGINS_PATH = ROOT_PATH . 'plugins/';
const THEME_PATH = ROOT_PATH . 'themes/altum/';
......
OTHER LOGIC AND CONSTANTS HERE
......
require_once APP_PATH . 'helpers/Affiliate.php';
/* Autoload for vendor */
require_once ROOT_PATH . 'vendor/autoload.php';
我尝试下载aws文件夹并将其复制到vendor文件夹,然后在PHP文件中:
use Altum\Middlewares\Csrf;
use Altum\Title;
use Aws\S3\S3Client;
但我得到一个错误
PHP Fatal error: Uncaught Error: Class 'Altum\Controllers\Aws\S3\S3Client' not found
1条答案
按热度按时间byqmnocz1#
每个项目可以有多个composer配置。这不是标准设置,但也是可能的。在您的情况下,它甚至可以帮助您解决问题,因为您现在不需要恢复旧的composer.json文件。
相反,composer.json文件的丢失被忽略,供应商被保留。即:
您拥有的第一个composer配置是之前的配置,也就是您丢失了 composer.json 文件的配置。但是您仍然拥有
vendor
文件夹,包括所有依赖项和元数据,如vendor/composer/installed.json
。由于您丢失了 composer.json 文件,您现在应该完整地存储vendor
文件夹。如果您使用的是git,你可能需要检查你的.gitignore
文件,并将/vendor/
条目替换为/vendor-aws/
,这样以前的vendor文件夹就不再被忽略,你可以将所有依赖项作为git子树放在配置管理下。第二个composer配置是我们要创建的配置。它几乎是默认的,只是供应商目录1不同。我们称之为
vendor-aws
,而不是默认名称vendor
。我们从 * 第一个composer配置 * 添加autoloader 2,因为第二个配置继承了第一个配置:验证这个新的
composer.json
文件并提交它。之后,需要aws和其他你想要的软件包。将您的新配置发送到测试并集成它,也许已经工作了。
这应该会继续工作,直到旧的供应商变得不可维护。但在此之前,您可能已经将所有依赖项添加到新的composer配置文件中,并重新构建供应商文件夹开关。
请记住,
vendor/composer/installed.json
仍然会提供已安装的列表,因此您仍然需要识别主要软件包(因为该列表包含 * 所有 * 软件包,包括依赖项),但您可以在新配置中通过require/remove轻松测试它们。