强制Composer更新一个包

9
我开发了一个自定义的 Laravel 包并将其放在 GitHub 上。我在 composer.json 中添加了它(下面是代码),它可以正常安装。
目前我还没有关于这个包的版本信息,因为它仍在开发中。当我对我的包进行更改时(在一个单独的目录中),我会提交并推送这些更改到 GitHub 存储库。
当我运行 'composer update' 时,出现 "nothing to install or update" 的提示。如果我从我的 vendors 目录中删除该包并更新,则可以从 GitHub 存储库安装我的包,并使用最新的更改。
但我希望能够在不先从我的 vendors 目录中删除它的情况下,拉取 / 强制获取来自存储库的最新更改,因为我对那个包有其他依赖项,如果我删除它,就会收到“artisan clear-compiled”错误提示,表明某些类未定义(因为它们在已删除的供应商包中被定义......)。
顶级 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"
  },
2个回答

5
你已经自己创建了关于你的包的所有元数据,这可能让Composer认为数据没有改变。
更简单且可能有效的方法是直接指向仓库的URL,然后让Composer从存储库中包含的composer.json文件中查询元数据:
"repositories": [{
    "type": "vcs",
    "url": "https://github.com/myrepo/MyExtension.git"
}]

1
非常感谢,那个完美地解决了我的问题!我把太多的信息放到了我的主composer.json文件中。现在我已经把它们全部移到了包的composer.json文件中,并且按照你上面建议的只保留基本的仓库信息(不过我把"type"改成了"git")。 - ChrisNY
错别字已经修正。谢谢! - Sven

4

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

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

1
正确。被接受的答案是一个有价值的建议,但它只会拉取一次代码。没有版本控制(标签),Composer就无法在git仓库上看到任何更改,因此(私有)仓库不会在(测试)服务器上更新。 - Dimitri Mostrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接