阻止Composer更新以重新安装

时间:2019-03-14 11:50:38

标签: php laravel git github composer-php

我有一个带有某些依赖项的Laravel项目。这些依赖项之一是我们自己的程序包。我需要在那个包装上做工。设置是我将软件包符号链接到git存储库。

供应商/ acme /我们的包裹->〜/ ourpackagerepo

我在存储库中进行更改,提交并在父级中运行Composer update以获得更新的composer.lock。过去工作正常。但是在我们从Gitlab迁移到Github之后,composer update acme/ourpackage做到了:

  • 删除acme / ourpackage(dev-feature / fixedinformationlog fae89ac)
  • 安装acme / ourpackage(dev-feature / fixedinformationlog 9bd7d4d):

因此覆盖了符号链接!然后,我必须删除该文件夹并创建一个新的符号链接以继续工作。这很麻烦,主要是因为PHPStorm需要重新编制索引。

composer.json中的代码段:

"repositories": [{
  "type": "vcs",
  "url": "git@github.com:acme/package.git"


"config": {
    "preferred-install": "dist",
    "platform": {
        "php": "7.0.12"
    },
    "use-github-api": false

关于如何使作曲家仅更新或仅保留tha文件而仅更新composer.lock的任何想法?

1 个答案:

答案 0 :(得分:1)

我认为您在这里有几个选择:

1。 Composer储存库路径

pointed out by @Loek一样,您可以使用 path 存储库。存在这个问题是为了解决通常不属于VCS(Version Control System,例如Git)或文件工件的情况。根据文档,您可以像这样使用它:

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

要注意的最重要部分是:

  

如果可能,本地软件包将被符号链接,在这种情况下,   控制台中的输出将读取来自   ../../packages/my-package。如果无法进行符号链接,则包装   将被复制。在这种情况下,控制台将输出Mirrored from   ../../ packages / my-package。

     

您可以强制使用符号链接代替默认的后备策略   “ symlink”:是,否则为“ symlink”:false选项的镜像。强迫   从部署或生成软件包时,镜像很有用   整体存储库。

此选项对我来说最有意义,这也是我个人会使用的选项。

2。具有环境变量的多个Composer配置

另一种选择是使用COMPOSER环境变量as described here。这样,您就可以加载与默认文件名不同的composer.json文件。因此,您可能有两个文件,并且取决于您将环境变量设置为哪个文件,它将加载适当的文件并创建一个匹配的锁定文件:

  • composer.json
  • composer-dev.json

好,那么为什么您要在世界上这样做呢?好吧,由于您尝试在本地处理软件包的方式(使用活动的符号链接),但又不想在生产中发生这种情况,如果第一种方法不可行,则可能会起作用。

我应该注意,您的目标应该始终是拥有一个跨环境(即本地,暂存,生产)相同配置的配置。我了解您希望立即在应用程序中看到存储库的本地更改,并且对每个更改都进行提交/推送/拉动的过程很可笑。


其他阅读/资源: