json 无法使编写器“路径”存储库工作

k10s72fa  于 2022-12-27  发布在  其他
关注(0)|答案(7)|浏览(109)

我有一个目录结构如下:

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.
我的composer版本是最新的(截至2016年4月20日2:39pm UTC),所有这些都在Vagrant(Debian)中运行。
我非常感谢您的任何推荐,我真的不知道还能做些什么。

7fyelxc5

7fyelxc51#

我也在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是这里的关键(考虑到您正在处理master分支),这有点令人恼火,但感谢一些有帮助的 composer 贡献者,我终于可以掌握这个问题了。

fcipmucu

fcipmucu2#

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

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

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

shstlldc3#

对我来说,问题是我忘了用docker挂载repository文件夹,所以本地Web服务器无法访问它。

eoxn13cs

eoxn13cs4#

对我有效的方法与上面的方法非常相似,但是我必须明确地针对我正在开发的分支。
假设代码位于目录/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。

bis0qfac

bis0qfac5#

对于未来的Google用户,请将您的版本添加到composer.json,然后要求使用带有--prefer-source选项的软件包。
例如:composer require your-vendor/package:1.0.* --prefer-source

svujldwt

svujldwt6#

如果包已经从原始存储库安装,Composer似乎会感到困惑:它获取本地存储库并从 composer.json 刷新 composer.lock,但甚至不尝试将更改获取到供应商目录。
首先删除它似乎可以解决这个问题:

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

jhiyze9q7#

在我的例子中,我的问题是存储库优先级,“当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"
    }
],

相关问题