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

标签 php composer-php php-5.6 laravel-4.2

我有以下问题:我有一个使用 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
  • 将以下内容添加到您的 composer.json 中:
    "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/

    相关文章:

    php - 使用 sql 查询从数据库中得到不同的结果

    php - Composer.phar 和(不同的)PHP 版本的工作环境

    php - 让 Composer (php 依赖管理器)在 docker 镜像构建上运行

    php - Telegram + PHP (Windows 7) : failed to open stream: HTTP request failed! HTTP/1.1 404 未找到

    php - Docker 安装 memcached

    php - 从Embed iframe获取YouTube图片

    php - 我希望它有一个下拉列表,其中的选择来自 mysql 表,而不是在文本框中输入

    composer-php - 我可以自动从 store.shopware.com 更新 Shopware 插件以保证兼容性吗?

    php - 创建一个函数来注销 WordPress 用户?