为什么在"bin"安装作曲家后找不到或重新创建 bin/console 脚本?



我更改了我的composer.json,当我进行时

rm -rf vendor/* && rm -rf bin/* && composer update

我在过程结束时收到错误消息,因为在文件夹bin中找不到Symfonyconsole。当我从另一个项目手动复制到那里时,它可以工作,但这不可能是解决方案。

错误消息如下:

....
- Installing symfony/test-pack (v1.0.6): Loading from cache
- Installing symfony/web-server-bundle (v4.3.6): Loading from cache
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
Executing script cache:clear [KO]
[KO]
Script cache:clear returned with error code 1
!!  Could not open input file: ./bin/console
!!  
Script @auto-scripts was called via post-update-cmd   

错误很明显,因为bin文件夹确实包含指向其他脚本加载的符号链接,但不包含控制台脚本本身。

我试着清除composer缓存,但没有什么区别。

如果我创建了一个完整的新空文件夹,并将composer.json文件复制到那里并运行composer install,那么一切都很好,console脚本就在bin文件夹中,它应该在那里。

有什么区别?

当我稍后自动运行它进行自动部署时,我怎么能确定控制台会在那里?

首先,您不应该删除bin/console脚本。这是应用程序的一部分,它相当于public/index.php,但作为控制台入口点。

最有可能的是,该文件应该保存在源代码存储库中。

因此,确保该文件在部署时存在的最佳方法是:不要删除它,它是源代码的一部分,应该保留。


该文件是在install期间在一个空文件夹上创建的,因为在install期间由于两件事执行了flex配方:

  • Flex配方仅在安装期间执行,而不是在更新期间执行
  • symfony/console的flex配方将复制整个bin目录以重新创建它,但它不会覆盖现有目录。(因此,如果您将此目录及其内容保留在您的repo中,那么当您在生产上部署项目时,它不会被覆盖(

最新更新