Composer (PHP) 如何融入 Docker 工作流程?

How does Composer (PHP) fit into a Docker workflow?

我希望了解将 Composer (PHP) 融入我的 Docker WordPress 开发工作流程的最佳实践。

我刚刚开始使用 Docker 进行 PHP/WordPress 开发以及 Composer。这是一个有点陡峭的学习曲线,但就我阅读大量指南和教程而言,这一切似乎都有意义。

我有 Docker 工作并且(我认为)很好地理解 how/why 来使用它。我知道 Docker 的一个好处是我不需要修改我的主机 OS 即安装 PHP 和 Composer 而且它可以很容易地四处移动,因为它包含了所有需要的东西.许多教程似乎都在主机 OS 上安装了 Composer 和 PHP,因为设置项目的第一步是使用 Composer 在主机 OS 上拉下诸如 Roots Bedrock 之类的东西,并且然后将此目录用作 Docker 中的卷。据我所知,这不是最好的方法,因为我正在修改主机 OS 并且项目容器不包含 运行.

所需的一切

我最好的猜测是使用一个专用的 Composer 容器,它将我的整个项目目录(包含我所有不同的项目)作为一个卷。然后我可以 运行 Composer 命令在这个容器中的适当的项目目录上。我的症结在于,每个项目容器都不包含 运行 (Composer) 所需的一切。所以我的下一个想法是每个项目都应该有一个自己的 Composer 容器。这将导致每个项目都具有以下容器:WordPress 官方图像、MariaDB、phpMyAdmin、Composer。我不确定这是否会使每个项目使用 4 个容器变得过大?

如果有人能够就执行此操作的最佳实践方法及其原因提出建议,我将不胜感激!谢谢! :)

如果我没听错,你希望能够在你的 wordpress php 项目中安装 运行 php composer 包。

如果您使用的是 macOS 或 Linux,有一个非常方便的东西叫做 homebrew。这将使您的生活更轻松地管理和更新系统上的软件包;比如node、composer等

按照 https://brew.sh/ 上的简单安装指南安装隐藏包。

我在 wordpress 中使用 composer php 包的经验,你必须将这些包(vendor 文件夹)上传到服务器(在你的主题文件夹中),这样你就可以通过autoload.php 文件。 与 node 和 javascript 不同,后者仅将您使用的必需模块编译到单个文件中。

所以我很确定您不需要在 docker 中创建一个额外的容器来处理这个问题,因为您将如何将作曲家包部署到您的生产环境中,这只会使事情变得复杂WordPress的。再加上更多的容器可能会减慢您的本地环境。

使用 composer.json 管理当前项目中的包,将每个项目视为自己的项目。


我是这样使用composer的(一旦你安装了homebrew)...

找到您想要使用的 php 包,例如 Netspot Carbon

也在 packagist.org/packages/nesbot/carbon.

在你本地项目的wp主题目录下,运行包安装命令...

composer require nesbot/carbon

这将在您的主题目录中创建这些文件和文件夹(不是 .gitignore 文件)。

您可以使用此方法安装任意数量的软件包。

如果您查看 composer.json 文件,您会看到这个 json 数组...

{
    "require": {
        "nesbot/carbon": "^2.36"
    }
}

所以如果你想删除一个作曲家包,只需从 json 数组中取出 vendor/package 键,然后 运行 像这样...

composer remove nesbot/carbon

最好不要手动编辑 composer.json 文件。使用 composer 命令构建此文件。

所以现在你已经安装了一些作曲家包,你需要将它们加载到你的主题中。

在顶部的 functions.php 中,或您打算调用包之前的任何位置,添加此 php 代码...

// load our composer autoloader
require 'vendor/autoload.php';

这个 autoload.php 文件是通过 composer 生成的,并加载所有已安装的包和包依赖项,

现在您可以像这样在您的主题 php 中使用包...(Netspot Carbon 示例)

use Carbon\Carbon;

$time = Carbon::createFromTimestampMs($cart['updated']['time'],'Asia/Dubai');

此外,您从不 需要将composer.jsoncomposer.lock 文件上传到您的服务器。您只需要部署 vendor 文件夹。

而你永远不会需要提交vendor文件夹,你只需要提交composer.json。使用此 json 文件,您可以使用此命令轻松重建 vendor 文件夹和 composer.lock 文件...

composer install

...将项目拖到另一台计算机时非常方便。

vendor 文件夹可能很重,对其进行版本控制毫无意义 (git),因为 composer.json 保存当前包版本。