我有以下问题:我有一个使用 Laravel 4.2、PHP 5.5.9 和 Composer 的旧项目。我正在尝试在另一台计算机上设置它(使用 Laravel 4.2.2 和 PHP 5.6),但其中一个必需的软件包缺少依赖项,因为管理该 GitHub 帐户的人决定将其删除。因此,无法通过 Composer 安装所需的包。
现在,旧项目已经下载了这些包,我可以手动复制它们。我不知道的是如何以这种方式正确地将它们添加到项目中并阻止 Composer 尝试重新下载它们。
没有代码示例,因为不需要。
最佳答案
如果您有这些文件,并且您将无法继续使用 Composer 来管理该包(例如更新、删除等),那么您只需要将这些文件视为属于您的项目。
如果不了解您要使用的软件包的更多信息,很难为您提供细节,但一般的方法是:
假设您要使用的包是 funtastic/foobar
.如果您有旧文件 vendor
,我们只需要vendor/funtastic
里面的目录,可能被称为 foobar
.
首先,在您的项目中复制您的文件。由于它们与应用程序的其余部分属于不同的命名空间,因此我个人不会将它们放在 src
中。 .您可以将它们放在名为 lib
的新目录中。 , 例如。
所以现在你的文件结构将是这样的:
project-root-dir
├── public
│ └── index.php
├── vendor/
├── lib/
│ └── foobar/
│ └── some files ...
│ └── src/
├── composer.json
├── composer.lock
现在你需要检查包的
composer.json
,特别是 autoload
部分。它可能会说:"autoload": {
"psr-4": { "Funtastic\\FooBar\\": "src" }
}
你现在需要去您的应用程序的
composer.json
,找到 autoload
部分并对其进行编辑,使其包含 Funtastic\FooBar
命名空间。假设你已经有一个 App
命名空间: "autoload": {
"psr-4": {
"App\\": "src/",
"Funtastic\\FooBar\\": "lib/foobar/src"
}
此外,您还需要查看
require
原始包的部分,看看它是否依赖于任何包,然后将这些包添加到您的应用程序的“require”部分 composer.json
.有了这一切,
composer.json
正确编辑,您可以简单地重新生成自动加载器( composer dump-autload
),您就可以开始了。显然,由于我不知道您的包和项目的具体情况,您必须根据您的具体情况调整这些说明,但是让包在您的应用程序中工作应该不需要很长时间。
或者,如果您想继续将此包视为“外部”依赖项:
package.zip
并将其放入 base_dir/lib
"repositories": [
{
"type": "package",
"package": {
"name": "vendor/name",
"version": "1.0",
"dist": {
"url": "lib/package.zip",
"type": "zip"
}
}
}
],
(解决方案最初由问题作者自己提出)。
有了这个,文件将在您的项目中存在两次:作为“存储库”,并安装在
vendor
上。 ,我觉得这不太理想。您也可以将文件保留在项目之外,但这需要额外的跟踪。我个人会硬着头皮接受这个包不再是外部依赖,而是应该由应用程序开发人员维护的文件。
关于php - 当外部存储库不再存在时,Composer/Laravel 从现有文件安装包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528660/