【问题标题】:git ignore composer.lock file while deployinggit 在部署时忽略 composer.lock 文件
【发布时间】:2019-12-09 14:45:31
【问题描述】:

说,composer.lock 文件被 git 忽略了。

现在在生产环境中,在 composer install 时,从 composer.json 安装文件并生成 composer.lock。

几天后,我在 composer.json 中添加了几个包,并将文件推送到生产环境。

在服务器上运行 composer install 时,它会识别 json 文件中的更新包吗?还是只运行 composer.lock 文件?

由于生产服务器中的 json 和 lock 文件现在不同步,composer 如何处理这个问题?

我有这个问题是因为我工作的其他团队更喜欢 git-ignoring 锁定文件,而且看起来效果很好。

【问题讨论】:

  • 你做错了。您的 composer.lock 文件应该被提交。在生产中,您应该进行 composer install。见stackoverflow.com/questions/22104102/…
  • @gview 这就是我的想法.. 但其他人似乎没有它也很好,这就是我的烦恼..
  • git-忽略composer.lock 文件是公共包的良好做法,具有定期安排的构建过程,但对于生产应用程序不是。对于生产应用程序,您需要针对完全相同组依赖项进行测试的可重复构建。例如,如果您在 CI 上成功测试您的应用程序并随后部署,但同时某些依赖项本身以破坏您的应用程序的方式更新......您的生产系统将在部署时关闭!
  • 只要运行composer update,您就可以忽略锁定文件,然后将生成的composer.lock 与您的应用程序一起打包,以便在构建过程中进行部署...如果您这样做有足够高的测试覆盖率。但即便如此,也存在多个开发人员检查您的应用程序的相同提交但实际上针对不同的依赖项集进行开发的风险->works-on-my-machine :)

标签: git composer-php


【解决方案1】:

composer install 只会识别出您的 composer.json 中有更改并且 composer.lock 文件不匹配。

您需要删除 composer.lock 文件并运行 composer install,或者更好的方法是运行 composer update。这将在必要时更新现有包并安装所有新添加的包,包括 composer.lock 文件。

【讨论】:

  • 当 compose recognizeschanges in composer.json 时,composer install 应该是 install 那些更新的包吗?
  • 首先,这实际上是错误的。看看我在我引用的问题中提供的答案。如果 composer install 没有找到 .lock 文件,它必须做与 composer update 相同的工作——即计算所有依赖关系并构建树,这可能是昂贵、耗时且不确定的。 Composer 更新是您在开发、测试和版本 composer.lock 文件时所做的事情。在生产环境中,您执行 composer install,它会读取 composer.lock 并仅安装(如有必要)缺少的库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 2016-04-09
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多