composer 状态不显示本地更改,composer 更新不重新生成包

问题描述 投票:0回答:3

我对 composer status 命令的行为感到困惑,

composer help
说:

status               Shows a list of locally modified packages.

所以,我开始一个新的空项目并需要一些包:

~/project$ composer require mustache/mustache
Using version ^2.12 for mustache/mustache
./composer.json has been created
  - Installing mustache/mustache (v2.12.0): Loading from cache
Writing lock file
Generating autoload files

让我们做一些更改(从该包中删除一个文件并更改另一个文件),然后再次运行

composer status

~/project$ rm vendor/mustache/mustache/README.md 
~/project$ echo '// Some change' >> vendor/mustache/mustache/src/Mustache/Engine.php 
~/project$ composer status
No local changes

它说没有本地更改。我期待 composer status 告诉我 README.md 已被删除并且 Engine.php 已更改。

如果我运行作曲家更新,什么也不会发生:

~/project$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
~/project$ ls vendor/mustache/mustache/README.md
ls: cannot access vendor/mustache/mustache/README.md: No such file or directory

我知道恢复原始包的唯一方法是删除供应商/目录并再次运行composer install

为什么composer status不显示本地更改,以及为什么composer update不恢复原始包?我正在使用作曲家 1.6.3

php composer-php
3个回答
3
投票

composer status
仅支持从源安装的软件包,不支持从下载的 ZIP 文件安装的软件包。这也是 Composer 不执行包更新的原因(即无法检测来自
dist
存储库的包中的任何更改)。

Composer GitHub 存储库上已经存在与此相关的问题:https://github.com/composer/composer/issues/5500


0
投票

尽管看起来这还没有实现,但我相信它现在可以工作了。在

composer status
期间,作曲家创建带有
_compare
后缀的特殊结账来比较版本:

Executing command (CWD): unzip -qq  '/var/www/html/legacy-app/vendor/aws/aws-sdk-php_compare/ba39e4a340165876e4355a19f89fe81f' -d '/var/www/html/legacy-app/vendor/composer/fd8c9a79'

0
投票

我还有一个问题,当我在包中添加一个新文件时(ps:composer status可以检测到包中的新文件),如何将新文件加载到autoload-files.php中,我尝试了很多方法,但我无法弄清楚。希望得到解决方案,谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.