当外部存储库不再存在时,Composer/Laravel 从现有文件安装包

m_h*_*ish 4 php laravel composer-php

我有以下问题:我有一个使用 Laravel 4.2、PHP 5.5.9 和 Composer 的旧项目。我试图在另一台计算机上设置它(使用 Laravel 4.2.2 和 PHP 5.6),但所需的包之一具有缺少的依赖项,因为管理该 GitHub 帐户的人决定删除它。因此,无法通过 Composer 安装所需的包。

现在,旧项目已下载这些包,我可以手动复制它们。我不知道的是如何以这种方式正确地将它们添加到项目中并阻止作曲家尝试重新下载它们。

没有给出代码示例,因为不需要。

yiv*_*ivi 5

如果您拥有这些文件,并且您将无法继续使用 Composer 来管理该包(例如更新、删除等),那么您只需将这些文件视为属于您的项目即可。

\n

如果不了解有关您要使用的软件包的更多信息,则很难为您提供具体信息,但一般方法是:

\n

假设您要使用的包是funtastic/foobar. 如果您有旧的文件vendor,我们只需要其中的目录vendor/funtastic,该目录可能被称为foobar.

\n

首先,复制项目中的文件。由于它们与应用程序的其余部分属于不同的命名空间,因此我个人不会将它们放在src. lib例如,您可以将它们放在名为 的新目录中。

\n

所以现在你的文件结构将是这样的:

\n
project-root-dir\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 public\n\xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.php\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 vendor/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib/\n\xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foobar/\n\xe2\x94\x82     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 some files ...\n\xe2\x94\x82     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 composer.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 composer.lock\n
Run Code Online (Sandbox Code Playgroud)\n

现在您需要检查包的composer.json,特别是该autoload部分。它可能会这样说:

\n
"autoload": {\n        "psr-4": { "Funtastic\\\\FooBar\\\\": "src" }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

您现在需要转到您的应用程序 composer.json,找到该autoload部分并对其进行编辑,使其包含Funtastic\\FooBar命名空间。假设您已经有一个App名称空间:

\n
  "autoload": {\n    "psr-4": {\n      "App\\\\": "src/",\n      "Funtastic\\\\FooBar\\\\": "lib/foobar/src"\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

此外,您还需要检查require原始包的部分,看看它是否依赖于任何包,并将这些包添加到应用程序的composer.json.

\n

完成所有这些并composer.json正确编辑后,您可以简单地重新生成自动加载器 ( composer dump-autload),然后就可以开始了。

\n

显然,由于我不知道您的包和项目的具体情况,因此您必须根据您的具体情况调整这些说明,但让该包在您的应用程序中运行应该不会花费很长时间。

\n
\n

或者,如果您想继续将此包视为“外部”依赖项:

\n
    \n
  1. 将所有压缩包文件压缩package.zip并放入base_dir/lib
  2. \n
  3. 将以下内容添加到您的composer.json:\n
    "repositories": [\n    {\n        "type": "package",\n        "package": {\n            "name": "vendor/name",\n            "version": "1.0",\n            "dist": {\n                "url": "lib/package.zip",\n                "type": "zip"\n            }\n        }\n    }\n],\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
\n

(最初由问题作者自己提出的解决方案)。

\n

这样,这些文件将在您的项目中存在两次:作为“存储库”,并安装在 上vendor,我觉得这不太理想。您还可以将文件保留在项目之外,但这需要额外的跟踪。

\n

我个人会硬着头皮接受这个包不再是外部依赖项,而是应该由应用程序维护者维护的文件。

\n