我有几个大型的Symfony项目,注意到当我们将所有东西更新到Symfony 4(Flex)后,当我们的部署自动化运行其正常流程:
composer install --no-dev
最终我们得到了(例如)这样的结果:
Symfony operations: 2 recipes (72fad9713126cf1479bb25a53d64d744)
- Unconfiguring symfony/maker-bundle (>=1.0): From github.com/symfony/recipes:master
- Unconfiguring phpunit/phpunit (>=4.7): From github.com/symfony/recipes:master
然后,如预期的那样,这将导致 symfony.lock
和 config/bundles.php
的更改,还可能会根据composer.json
文件中的require-dev
包含的内容而进行其他更改。
严格来说,这并不是一个破坏性的变化,但是部署到生产环境后不能再使用干净的 git status
命令输出确实很让人烦恼,并且会导致混淆,不知道实际上部署了什么。
有各种解决方法,例如我可以将所有东西都放在 require
中而不是 require-dev
,因为将那些东西部署出去并没有任何实质性的危害,或者我可以省略 Composer 命令中的 --no-dev
部分。
但是,真正的正确做法是什么?看起来奇怪的是,如果您只是部署了一款锁定的软件,就没有办法告诉 Flex 不要更改配置。这是一个功能请求,还是我在配置上遗漏了一些细节?
symfony.lock
文件提交到仓库?这是为了避免部署时出现问题所必需的。 - ycerutosymfony.lock
在版本控制下。实际上问题相反:由于指定了--no-dev
,Flex 认为正在删除require-dev
的成员,因此它根据适当的配方中的manifest.json
运行未配置步骤。在我的示例中,这意味着删除phpunit.xml.dist
文件并从config/bundles.php
中删除 Maker bundle。似乎应该有一种方法可以防止在生产部署时出现这种行为。 - futurealsymfony.lock
在部署时有差异时,我才能看到这个问题。 - yceruto