我对 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
composer status
仅支持从源安装的软件包,不支持从下载的 ZIP 文件安装的软件包。这也是 Composer 不执行包更新的原因(即无法检测来自 dist
存储库的包中的任何更改)。
Composer GitHub 存储库上已经存在与此相关的问题:https://github.com/composer/composer/issues/5500
尽管看起来这还没有实现,但我相信它现在可以工作了。在
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'
我还有一个问题,当我在包中添加一个新文件时(ps:composer status可以检测到包中的新文件),如何将新文件加载到autoload-files.php中,我尝试了很多方法,但我无法弄清楚。希望得到解决方案,谢谢!