为什么在安装 composer 后 bin/console 脚本没有在 "bin" 中找到或重新创建?

Why isn't bin/console script found nor recreated in "bin" after composer install?

我改变了我的 composer.json 突然间,当我这样做时

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

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

报错信息如下:

 ....
  - 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.json 文件复制到那里,然后 运行 composer install,一切都很好,console 脚本在 bin 文件夹,它应该在的位置。

有什么区别?

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

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

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

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


文件是在 install 期间在空文件夹上创建的,因为 flex 配方在 install 期间执行,原因有两点:

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