`composer update` 不会更新到最新版本

Posted

技术标签:

【中文标题】`composer update` 不会更新到最新版本【英文标题】:`composer update` doesn't update to the latest version 【发布时间】:2018-04-16 19:39:48 【问题描述】:

在我的composer.json 我有

"require": 
    . . .
    "unisharp/laravel-filemanager": "~1.8"

目前,最新版本是v1.8.2.2,在运行composer update 命令后,我将它安装在我的本地主机项目中(一切正常)。

我已将 (git push origin master) 从 localhost 推送到 Bitbucket 上的远程仓库,并通过 SSH 连接到 Web 服务器并从该远程仓库克隆 (git clone ...)。

现在,当我运行 composer update(在网络服务器上)时,它会安装 v1.8.0,它有一些 bug。之后,当我再次尝试运行 composer update - 我得到:

Nothing to install or update

...但它仍然是 v1.8.0(不像在本地主机上的 v1.8.2.2)。

所以,我在我的本地主机和实时服务器上有相同的 composer.json 项目,但由于某种原因,本地主机有最新版本的包,而实时版本有旧版本的错误,composer update 没有不要更新它。

你知道为什么会这样吗?我该如何解决?

【问题讨论】:

您应该在本地运行 composer update 并将您的 composer.lock 文件提交给您的版本控制。然后,您应该在您的服务器上运行 composer install 以提取 composer.lock 文件中详细说明的依赖项。 跑完composer update,你跑php artisan vendor:publish了吗? php artisan vendor:publish 将如何更新包版本? @Jonathon 我犯了一个错误,因为我没有先运行install,而是update(看起来是composer.json,而不是composer.lock)。现在当我第一次做composer install 时 - 一切都很好。如果可以 - 将您的评论发布为 answer 以便我查看。 没问题,现在添加。 【参考方案1】:

我只花了两个小时调试这个。原来问题在于 composer.json 文件中有一个“版本”标签。

当那里有版本标签时,该版本将优先于您应用的任何 git 标签版本。

【讨论】:

【参考方案2】:

您应该在本地运行composer update。这将使用您已安装的所有软件包的版本更新composer.lock。您应该将您的 composer.lock 文件提交给您的版本控制。

在您的服务器上,一旦您更新了文件,您应该运行 composer install,以便 Composer 可以更新其依赖项以匹配您在 composer.lock 文件中指定的那些。

【讨论】:

以上是关于`composer update` 不会更新到最新版本的主要内容,如果未能解决你的问题,请参考以下文章

锁定文件不是最新的 composer.json 中的最新更改

Composer 不会更新过时的依赖项

Composer 未将软件包更新到最新版本

Laravel - 在我运行 composer update CLI artisan 之后出现问题

尝试通过 Composer 将 Laravel/Nova 更新到最新版本时出现 INVALID CREDENTIALS 错误

composer update的错误使用以及如何更新composer.lock文件