是否已独立安装Composer模块OS?

时间:2018-08-31 11:16:51

标签: php composer-php devops

我知道以下情况与现代最佳实践相去甚远,但让我们尝试一下。

让我们假设:

  1. 您拥有具有相同PHP版本但操作系统不同的开发环境和服务器。
  2. 您要/必须将vendors文件夹原样部署到服务器。

这是多么可能:某些软件包由于操作系统切换而无法工作,并且如果从服务器上的composer json文件安装它们(可以不完全依赖于平台)可以避免失败?

我从这个question知道在安装过程中设置的绝对路径可能是一个问题。还有其他可能的问题吗?

2 个答案:

答案 0 :(得分:1)

该可能性很高,因为作曲家根据环境设置的不同而工作。

一个简单的例子是https://getcomposer.org/doc/articles/scripts.md

可以运行依赖于已安装组件的自定义逻辑,并且仅在主机操作系统具有可用的东西时才准备一些东西-该东西与composer.lock无关

核心问题是您想重用供应商文件夹。无法使Composer如此工作,这就是为什么.gitignore文件中经常提到vendor的原因。 作曲家的行为将因环境而异,其结果不应复制。 如果要使OS-es之间的行为保持一致,请使用Docker或vagrant稳定应用程序及其环境。

答案 1 :(得分:0)

只要您将composer.lock提交到项目中,它们就应该独立于操作系统。 composer.lock的重点是通过composer install独立于操作系统安装相同的软件包,并且Composer本身不使用任何绝对路径(默认情况下)。实际上,作为原因,Composer维护者discourage using it in production和许多问题已因“ Composer不是部署工具”而关闭。因此,通过设计,您应该能够在环境之间移动安装,并且在每个系统上,您将获得composer install安装的相同软件包。

唯一的问题可能来自scripts和/或plugins,这可能会导致某些不可移植的事情,您需要在目标安装上运行它。


简而言之:是的,安装独立于操作系统(除非您做某些事情,否则它将改变这一情况)。