无法让作曲家“路径”存储库工作

时间:2016-04-20 13:40:42

标签: php json repository package composer-php

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

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)中运行。

非常感谢来自此处的任何建议。我真的不知道还能做什么。

5 个答案:

答案 0 :(得分:46)

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

int v1 = row.Field<int>("Value1");
int v2 = row.Field<int>("Value2");

var inRangeRows = from r in dtCurrentTable.AsEnumerable() 
                  where (r.Field<Int32>("Value1") <= v1 && r.Field<Int32>("Value2") >  v1)
                     || (r.Field<Int32>("Value1") <  v2 && r.Field<Int32>("Value2") >= v2)
                  select r;

bool inRange = inRangeRows.Any(); 

但是,如果您只有一个没有版本的本地仓库,则必须使用:

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

版本{ "repositories": [ { "type": "path", "url": "../../packages/my-package" } ], "require": { "my/package": "dev-master" } } 是此处的关键(假设您正在处理主分支)。这有点令人愤怒,但多亏了一些有用的作曲家贡献者,我终于可以抓住这个了。

我希望这可能在将来帮助某人。

祝你好运!

答案 1 :(得分:1)

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

假设目录/ 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。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

说明:最初,我尝试composer install my/package在依赖版本上失败。因此,我需要进行一些本地修改以使其与Laravel 6.0一起使用。但是,它继续检查Laravel软件包的错误版本,这使我认为它看不到我用repositories"type": "path"键中设置的本地存储库。我首先确保该路径存在并且位于正确的分支上(master,这就是为什么我在dev-master中使用composer.json的原因)。一旦我清除了作曲家的缓存并运行了更新程序,便使用我的本地路径对其进行了更新,而没有任何依赖关系问题。

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

答案 4 :(得分:0)

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

首先将其删除似乎可以解决该问题:

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