“composer update”无法更新到最新版本。

7
在我的composer.json文件中,我有以下内容:
"require": {
    . . .
    "unisharp/laravel-filemanager": "~1.8"
}

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

我从本地主机推送到Bitbucket上的远程仓库(git push origin master),然后通过SSH连接到Web服务器,并从远程仓库中克隆(git clone ...)下来。

现在,在Web服务器上运行composer update时,它会安装v1.8.0,该版本存在一些错误。之后,当我再次尝试运行composer update时,我会得到以下提示:

Nothing to install or update

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

所以,我在本地主机和实际服务器上拥有相同的项目和相同的composer.json文件,但由于某些原因,本地主机上具有软件包的最新版本,而实际版本具有带有错误的旧版本,并且composer update无法更新它。

您知道为什么会发生这种情况以及如何解决它吗?


2
你应该在本地运行 composer update 命令,并将你的 composer.lock 文件提交到版本控制中。然后,在服务器上运行 composer install 命令,以拉取在 composer.lock 文件中详细列出的依赖项。 - Jonathon
在运行 composer update 之后,您是否运行了 php artisan vendor:publish 呢? - Jems
php artisan vendor:publish 如何更新软件包版本? - Camilo
1
@Jonathon 我犯了一个错误,因为我没有先运行install而是运行了update(它查看的是composer.json而不是composer.lock)。现在当我首先运行composer install时 - 一切都没问题了。如果可以的话 - 把你的评论发布为_答案_,这样我就可以检查它了。 - PeraMika
1
当然,现在已经添加了。 - Jonathon
2个回答

11

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

在服务器上,一旦更新了文件,您应该运行composer install命令,以便Composer可以根据composer.lock文件中指定的依赖关系来更新其依赖项。


谢谢,我在想如何更改composer包并更新服务器而不更新版本,想要删除一些包。 - Alex Westergaard

1

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

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


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