安装的 Composer 模块 OS 是独立的吗?
Are installed Composer modules OS independent?
我知道下面的场景与现代最佳实践相去甚远,但让我们试一试。
让我们假设:
- 您的开发环境和服务器 PHP 版本相同,但 OS 不同。
- 您 want/must 将 vendors 文件夹按原样部署到服务器。
有多大可能:某些软件包会因为 OS 切换而无法工作,并且如果它们是从服务器上的 composer json 文件安装的(即它们'不是完全依赖于平台)?
我从这个知道在安装过程中设置的绝对路径可能有问题。还有其他可能的问题吗?
可能性很高,因为 composer 会根据环境设置以不同的方式工作。
这方面的简单示例是 https://getcomposer.org/doc/articles/scripts.md
它可以 运行 自定义逻辑依赖于已安装的组件,并且仅当主机 OS 有可用的东西时才准备一些东西 - 这与 composer.lock[=12 无关=]
核心问题是你想重用vendor文件夹。 Composer 不是以这种方式工作的,这就是 vendor
经常在 .gitignore 文件中提到的原因。
作曲家在每个环境中的行为都不同,其结果不应被复制。
如果要使 OS-es 之间的行为一致,请使用 Docker 或 vagrant 来稳定应用程序及其环境。
它们应该独立于 OS,只要您将 composer.lock
提交到您的项目中。 composer.lock
的要点是通过 composer install
独立于 OS 安装相同的包,并且 Composer 本身不使用任何绝对路径(默认情况下)。事实上,Composer 维护者 discourage using it in production 和许多问题已经关闭,原因是 "Composer is not a deployment tool"。因此,根据设计,您应该能够在环境之间移动安装,并且在每个系统上,您将获得 composer install
.
安装的相同软件包
唯一的问题可能来自 scripts and/or plugins,它可能会做一些不可移植的事情,您需要在目标安装时 运行 它。
简而言之:是的,安装独立于 OS(除非你做某事,否则会改变它)。
我知道下面的场景与现代最佳实践相去甚远,但让我们试一试。
让我们假设:
- 您的开发环境和服务器 PHP 版本相同,但 OS 不同。
- 您 want/must 将 vendors 文件夹按原样部署到服务器。
有多大可能:某些软件包会因为 OS 切换而无法工作,并且如果它们是从服务器上的 composer json 文件安装的(即它们'不是完全依赖于平台)?
我从这个
可能性很高,因为 composer 会根据环境设置以不同的方式工作。
这方面的简单示例是 https://getcomposer.org/doc/articles/scripts.md
它可以 运行 自定义逻辑依赖于已安装的组件,并且仅当主机 OS 有可用的东西时才准备一些东西 - 这与 composer.lock[=12 无关=]
核心问题是你想重用vendor文件夹。 Composer 不是以这种方式工作的,这就是 vendor
经常在 .gitignore 文件中提到的原因。
作曲家在每个环境中的行为都不同,其结果不应被复制。
如果要使 OS-es 之间的行为一致,请使用 Docker 或 vagrant 来稳定应用程序及其环境。
它们应该独立于 OS,只要您将 composer.lock
提交到您的项目中。 composer.lock
的要点是通过 composer install
独立于 OS 安装相同的包,并且 Composer 本身不使用任何绝对路径(默认情况下)。事实上,Composer 维护者 discourage using it in production 和许多问题已经关闭,原因是 "Composer is not a deployment tool"。因此,根据设计,您应该能够在环境之间移动安装,并且在每个系统上,您将获得 composer install
.
唯一的问题可能来自 scripts and/or plugins,它可能会做一些不可移植的事情,您需要在目标安装时 运行 它。
简而言之:是的,安装独立于 OS(除非你做某事,否则会改变它)。