【问题标题】:Can't get composer "path" repository to work无法让作曲家“路径”存储库工作
【发布时间】:2016-08-13 05:50:32
【问题描述】:

我有一个这样的目录结构:

composer.json < Main
  packages/
    balunker/
      testpackage/
        composer.json < Package
        src/
          TestPackage.php

主要的composer.json 看起来像这样:

{
    "name": "vagrant/composer-test",
    "repositories": [
        {
             "type": "path",
            "url": "packages/*/*"
        }
    ],
    "require": {
        "balunker/testpackage": "*"
    }
}

虽然包裹 composer.json 看起来像这样:

{
  "name": "balunker/testpackage",
  "autoload": {
    "psr-4": {
      "Balunker\\": "src/"
    }
  }
}

composer update 上,我简单地收到一条消息,指出无法解析包。没有创建符号链接,也没有安装包。我确实花了半天时间来解决这个问题,但没有任何成功。

我还上传了 composer update -vvv 的详细输出:http://pastebin.com/mMRHsACk

我的作曲家版本是最新的(截至 2016 年 4 月 20 日下午 2:39 UTC),所有这些都在 Vagrant (Debian) 中运行。

非常感谢您提供的任何建议。我真的不知道还能做什么。

【问题讨论】:

    标签: php json repository package composer-php


    【解决方案1】:

    在我的情况下,我的问题是存储库优先级,“当 Composer 解决依赖关系时,它将在最顶层的存储库中查找给定的包”,请检查 https://getcomposer.org/doc/articles/repository-priorities.md TLDR;在 composer.json 中确保您的本地路径首先位于存储库下

    "repositories": [
        {
             "type": "path",
             "url": "packages/local-path-goes-first"
        },
        {
             "type": "vcs",
             "url": "https://github.com/berrugo/other-repos"
        }
    ],
    

    【讨论】:

      【解决方案2】:

      对我来说,问题是我忘记使用 docker 挂载存储库文件夹,因此本地网络服务器无法访问它。也要注意这一点

      【讨论】:

        【解决方案3】:

        如果软件包已经从原始存储库安装,Composer 似乎会感到困惑:它会获取您的本地存储库并从其 composer.json 刷新 composer.lock 但不会'甚至不尝试将更改获取到供应商目录。

        首先删除它似乎可以解决它:

        composer remove foo/bar
        composer require foo/bar @dev
        

        【讨论】:

        • 对我不起作用
        【解决方案4】:

        帮助我解决问题的是composer clear-cache,然后运行composer update

        解释:我最初尝试composer install my/package,但在依赖版本上失败了。所以我需要进行一些本地修改以使其适用于 Laravel 6.0。但是,它继续检查错误版本的 Laravel 软件包,这让我相信它没有看到我在 repositories 键和 "type": "path" 中设置的本地存储库。我首先确保路径存在并且我在正确的分支上(master 这就是我在composer.json 中使用dev-master 的原因)。一旦我清除了作曲家缓存并运行更新,它使用我的本地路径更新,没有依赖问题。

        "repositories": [
            {
                "type": "path",
                "url": "../libs/package-name"
            }
        ],
        "require-dev": {
            "pkg-maintainer/package-name": "dev-master"
        }
        

        【讨论】:

          【解决方案5】:

          对于未来的 Google 员工,请将您的版本添加到 composer.json,然后需要带有 --prefer-source 选项的软件包。

          例如:composer require your-vendor/package:1.0.* --prefer-source

          【讨论】:

            【解决方案6】:

            对我有用的方法与上述非常相似,但我必须专门针对我正在开发的分支。

            假设 /newapp 目录中的代码与 /app 处于同一级别,并且有一个名为 feature/the-new-package 的分支:

            "repositories": [
              {
                "type": "path",
                "url": "newapp"
              }
            ],
            "require": {
              "package/newapp": "dev-feature/the-new-package"
            },
            

            \* 不起作用,dev-master 也没有。它必须是 dev-feature/the-new-package。

            【讨论】:

              【解决方案7】:

              我也在 Github 上发布了这个问题,结果证明文档有点误导。它说:

              {
                  "repositories": [
                      {
                          "type": "path",
                          "url": "../../packages/my-package"
                      }
                  ],
                  "require": {
                      "my/package": "*"
                  }
              }
              

              但是,如果您只有一个没有发布的本地 repo,您​​必须使用:

              {
                  "repositories": [
                      {
                          "type": "path",
                          "url": "../../packages/my-package"
                      }
                  ],
                  "require": {
                      "my/package": "dev-master"
                  }
              }
              

              dev-master 版本是这里的关键(假设您在 master 分支上工作)。这有点令人恼火,但感谢一些乐于助人的作曲家贡献者,我终于可以掌握这一点。

              我希望这对将来的人有所帮助。

              祝你好运!

              【讨论】:

              • 对我来说,诀窍是将"minimum-stability": "dev" 添加到我的composer.json 文件中
              • @BradKent 我强烈建议不要使用"minimum-stability": "dev" 这意味着:您希望从所有依赖项中获取最新的不稳定版本。 dev- 前缀或 -dev 后缀只会改变有问题的一个包。
              • 只要你还有"prefer-stable": true,就可以了。它只会在需要满足依赖关系时使用开发包。
              • 作为将整个作曲家设置为minimum-stability: dev 的替代方法,您可以通过dev-master*@dev 为版本标记单个包。对于在 Windows 上运行它的任何人,您可能还需要将 {"options": { "symlink": false }} 添加到存储库定义中,以便您从连接切换到镜像本地包。
              • 我已经尝试了堆栈上发布的所有解决方案,但仍然没有
              猜你喜欢
              • 2018-10-27
              • 2015-01-16
              • 2016-12-09
              • 1970-01-01
              • 1970-01-01
              • 2016-09-05
              • 1970-01-01
              • 1970-01-01
              • 2014-08-11
              相关资源
              最近更新 更多