【问题标题】:Force Composer to update a package强制 Composer 更新包
【发布时间】:2016-06-10 06:03:34
【问题描述】:

我已经开发了一个自定义的 laravel 包并将它放在 GitHub 上。我把它放在composer.json(下面的代码)中,它安装得很好。

我还没有关于它的版本信息,因为它仍在开发中。当我对我的包进行更改(在一个单独的目录中)时,我提交并将更改推送到 GitHub 存储库。

当我运行“composer update”时,我得到“没有要安装或更新的东西”。如果我从供应商目录中删除包并进行更新,那么我的包将从 GitHub 存储库安装,并带有最新的更改。

但是我希望能够从 repo 中提取/强制执行最新的更改,而无需先从我的供应商目录中删除它,因为我对该包有其他依赖项,如果我删除它,我会从 artisan clear 那里得到错误-编译未定义类(因为它们是在我删除的供应商包中定义的......)

我的顶级 composer.json 的相关部分是:

  "repositories": [{
    "type": "package",
    "package": {
      "name": "myrepo/MyExtension",
      "version": "dev-master",
      "source": {
        "url": "https://github.com/myrepo/MyExtension.git",
        "type": "git",
        "reference": "master"
      },
      "autoload": {
        "psr-4": {
          "MyExtension\\": "src/Extensions/"
        }
      }
    }
  ],
  "require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.2.*",
    "myrepo/MyExtension": "dev-master"
  },

【问题讨论】:

    标签: php laravel composer-php


    【解决方案1】:

    要更新您的更改,您需要对软件包进行版本控制,但正如您之前所说,您没有对软件包进行版本控制,因此要更新您的更改,您可以转到 composer.lock 删除您的软件包条目或使用 composer 来删除软件包并重新安装。例如

     // composer remove vendor/package && composer require vendor/package
     composer remove zizaco/entrust && composer require zizaco/entrust
    

    【讨论】:

    • 正确。接受的答案是一个有价值的建议,但它只会提取一次代码。如果没有版本控制(标签),composer 根本不会在 git 存储库上看到任何更改,因此(私有)存储库不会在(测试)服务器上更新。
    【解决方案2】:

    你自己创建了关于你的包的所有元数据,可能让 Composer 认为数据没有改变。

    更简单且可能有效的方法是简单地指向存储库 URL,让 Composer 从存储库中包含的 composer.json 文件中查询元数据:

    "repositories": [{
        "type": "vcs",
        "url": "https://github.com/myrepo/MyExtension.git"
    }]
    

    【讨论】:

    • 效果很好,谢谢!我在我的主 composer.json 文件中放入了太多信息。将其全部移至包 composer.json,以及您上面建议的基本存储库信息(不过,将“类型”更改为“git”)。
    • 已修复错字。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 2019-01-11
    • 2016-01-08
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    相关资源
    最近更新 更多