【问题标题】:How does composer resolve the `dumpautoload` command?composer 如何解析 `dumpautoload` 命令?
【发布时间】:2019-09-24 22:48:09
【问题描述】:

使用Composer version 1.8.6 2019-06-11 15:03:05 dumpautoload 命令适用于以下所有变体

composer dump-autoload
composer dumpautoload
composer dumpautoloa
composer dumpautolo
composer dumpautol
composer dumpauto
composer dumpaut
composer dumpau
composer dumpa
composer dump
composer dum
composer du

直到composer d 抛出

[Symfony\Component\Console\Exception\CommandNotFoundException]
命令“d”不明确(取决于、dump-autoload 和另外 1 个)。

这些命令是如何解决的?我了解dumpautoloadcomposer source here 中被设置为dump-autoload 的别名

class DumpAutoloadCommand extends BaseCommand
{
   protected function configure()
   {
      $this->setName('dump-autoload')->setAliases(array('dumpautoload'))

composer/RootPackage.php 中的setAliases source here 仅将别名分配给private $aliases; 属性

public function setAliases(array $aliases)
{
    $this->aliases = $aliases;
}

但是其他变体是如何解决的呢?

【问题讨论】:

  • 如果我不得不大胆猜测,它可能是使用similar_text()
  • similar_text('du', 'dumpautoload'); => 2 我觉得还不够
  • similar_text('dumpautoload', 'dumnautoload'); => 11/12 但讽刺的是dumnautoload 不起作用

标签: php laravel composer-php command-line-arguments


【解决方案1】:

Composer 建立在symfony/console 之上,搜索命令的代码位于Symfony\Component\Console\Application::find,可以在https://github.com/symfony/console/blob/master/Application.php#L596 中找到。基本上,所有已注册的命令都会被检查到最短、可清晰识别的长度 - 所以similar_text 的方法已经太复杂了;)

【讨论】:

  • 有趣!我还发现了setAliases 的另一个实例,它将命令传递给validateName($name),它执行了一些 preg_matching
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多