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


Can't get composer "path" repository to work

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

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

非常感谢从这里的任何建议。我真的不知道还能做什么了。

我也

在Github上发布了这个问题,事实证明文档有点误导。它说:

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

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

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

版本 dev-master 是这里的键(假设您正在处理主分支)。这有点令人愤怒,但多亏了一些乐于助人的作曲家贡献者,我终于可以掌握这一点。

帮助我解决问题的是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"
}

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

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

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

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

''* 不起作用,dev-master 也没有。它必须是开发功能/新包。

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

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

如果

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

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

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

就我而言,我的问题是存储库优先级,"当 Composer 解析依赖项时,它将在最顶层的存储库中查找给定的包",请检查 https://getcomposer.org/doc/articles/repository-priorities.mdTLDR;在 composer.json 中,确保本地路径在存储库下排在第一位

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

添加"minimum-stablilty": "dev"是正确安装本地软件包的关键。

这种格式对我来说也很好用;它不仅说明了包名称,而且干净且易于阅读。

"minimum-stability": "dev",
"repositories": {
    "foo/bar": {
        "type": "path",
        "url": "/Users/username/Sites/packages/packageName",
        "options": {
            "symlink": true
        }
    }
}