Drupal 9:剖析 Drupal 推荐的 Composer 文件

根据 Drupal 官方文档,要使用 composer 创建新站点,您应该使用名为 drupal/recommended-project 的 composer 模板项目。它有一个composer.json带有一些值的默认文件设置,可帮助您快速启动并运行新的 Drupal 项目。

这是一个很好的举措,可以让您快速启动并运行标准的 Drupal 站点。我已经多次使用这个作曲家项目,但我还没有真正看过其中的内容。我想我会潜入并确切地看到那里的内容并逐行解剖它。

重申 Drupal 文档中的内容,使用 Composer 创建一个全新的 Drupal 项目,请使用以下命令。

composer create-project drupal/recommended-project my-project

这将在名为my-project的目录中创建以下目录结构,该目录包含所有已安装并准备就绪的 Drupal 依赖项。

$ ls -1

composer.json

composer.lock

vendor

web

composer.json此项目中包含的文件与原始推荐项目相同,因为它用于构建项目。

让我们从顶部开始。

作曲家元数据

项目的前几行是一堆元数据项,其中包含有关项目的信息以及从何处获得支持。

{

    "name": "drupal/recommended-project",

    "description": "Project template for Drupal 9 projects with a relocated document root",

    "type": "project",

    "license": "GPL-2.0-or-later",

    "homepage": "https://www.drupal.org/project/drupal",

    "support": {

        "docs": "https://www.drupal.org/docs/user_guide/en/index.html",

        "chat": "https://www.drupal.org/node/314178"

    },

...

这些对于 Drupal 很重要,但对于您自己构建的 Drupal 项目网站则不需要。事实上,您可以将其简化为名称、描述和许可,并根据需要进行更改。唯一的要求是项目名称必须采用供应商名称、正斜杠和包名称的格式。

储存库

下一项称为“存储库”。本节将packages.drupal.org/8站点注册为 Composer 用于查找 Drupal 包的端点。

    "repositories": [

        {

            "type": "composer",

            "url": "https://packages.drupal.org/8"

        }

    ],

这实质上意味着我们现在可以通过运行这样的命令来要求 Drupal 包。

composer require drupal/token

这将知道查看packages.drupal.org/8以了解有关请求的包的更多信息。

要求

现在我们进入项目依赖项,这是包含在推荐的 Drupal 项目中的任何其他项目。默认情况下,它带有四个依赖项。

    "require": {

        "composer/installers": "^1.9",

        "drupal/core-composer-scaffold": "^9",

        "drupal/core-project-message": "^9",

        "drupal/core-recommended": "^9"

    },

详细研究每一个:

  • composer/installers - 这个包允许包作者指定不同类型的项目,以便可以用不同的方式处理它们。这意味着您可以使用drupal-module类型创建一个项目, 并且可以将其视为 Drupal 模块。还有许多其他项目类型可用,不同类型的 Drupal 项目只是这个包的一部分。请注意,您仍需要在项目中包含不同项目所在的位置,但稍后会在文件中的额外部分中处理该位置。

  • drupal/core-composer-scaffold - 一个提供将 Drupal 文件(index.php、update.phprobots.txt等)移动到正确位置的机制的包。与 composer/installers 包一样,这个包在额外的部分也有一个参考(我们将在后面介绍)。

  • drupal/core-project-message - 这是一个 Composer 插件,在 Composer 安装过程完成后显示一条消息。这用于欢迎您使用 Drupal 并显示一些有关从何处获得帮助的初步提示和技巧。安装站点后,您可以删除此包,因为它已完成其工作。

  • drupal/core-recommended - 这个包没有任何自己的代码,但用于包含 Drupal 和 Drupal 核心使用的一堆其他包。包括主要的 drupal/core 包,还有用于主题工作的 twig 和 Drupal 使用的一些 symfony 组件。

请注意,我特意查看了上面 Drupal 项目中的 9.1.x 分支。

作为一个兴趣点,由于上述项目包括其他项目,新安装的 Drupal 项目中的依赖项数量为 58。要查看包含的项目列表,只需运行composer show

需要开发

require-dev 部分用于安装在运行测试或其他开发相关任务时使用的包。

    "require-dev": {

        "drupal/core-dev": "^9"

    },

这包括 drupal/code-dev 包,后者又包括用于运行 Drupal 单元测试的 Behat、PHPUnit 和 Prophecy 等包。这些背后的想法是它们不需要安装在生产服务器上,因此可以分离出来。

冲突

Conflict 用于指定与此项目冲突的某些项目。这意味着如果尝试将它们添加为需求,添加到此部分的任何包都将导致冲突。

    "conflict": {

        "drupal/drupal": "*"

    },

在这种情况下,针对 drupal/drupal 包设置了冲突,该包基本上是 Drupal 代码库的副本。将 drupal/core 和 drupal/drupal 添加到同一个项目中几乎没有意义,因此会产生冲突以防止这种情况发生。

套餐设置

接下来是两个设置,用于设置您可以包含到此项目中的项目类型。

    "minimum-stability": "dev",

    "prefer-stable": true,

minimum-stability设置为dev意味着我们可以将开发包(即没有任何标记发布的包)包含到项目中。composer 中此设置的默认值是stable,这将导致 composer 仅将完整版本包含到项目中。Drupal 贡献的代码环境确实包含一些不稳定的包,因此包含它是有意义的。

更喜欢稳定的 选项告诉作曲家,如果包括任何包,它应该挑选包的“最新”版本(指定的任何版本号的限制范围内)。这个想法是,如果你包含一个包并且有一个开发版本和一个alpha版本可用,composer 将选择alpha版本并包含它。

配置

配置部分用于将任何杂项设置应用于作曲家。

    "config": {

        "sort-packages": true

    },

在这种情况下,我们设置了对添加的包进行排序的选项,这意味着添加到此 composer 文件中的任何包都将按字母顺序添加。

额外的

最后和最长的部分是额外的。本节中的值可以通过由 composer 运行的脚本访问,因此基本思想是在 composer 中运行的任何脚本都将获取这些数据并能够使用它做一些事情。由于这是一个很长的部分,我把它分成了几块。

额外部分的第一部分是drupal-scaffold,由 drupal-scaffold 包使用,并将通知包 web 根目录的位置。当运行 composer install 命令时,drupal-scaffold 包将运行,获取此信息并针对提供的 web 根目录运行它的脚手架操作。

    "extra": {

        "drupal-scaffold": {

            "locations": {

                "web-root": "web/"

            }

        },

...

接下来是 installer-paths 部分,它详细说明了不同类型的 Drupal 包的最终位置。composer/installers 包使用它来对这些包执行移动操作

...

        "installer-paths": {

            "web/core": ["type:drupal-core"],

            "web/libraries/{$name}": ["type:drupal-library"],

            "web/modules/contrib/{$name}": ["type:drupal-module"],

            "web/profiles/contrib/{$name}": ["type:drupal-profile"],

            "web/themes/contrib/{$name}": ["type:drupal-theme"],

            "drush/Commands/contrib/{$name}": ["type:drupal-drush"],

            "web/modules/custom/{$name}": ["type:drupal-custom-module"],

            "web/profiles/custom/{$name}": ["type:drupal-custom-profile"],

            "web/themes/custom/{$name}": ["type:drupal-custom-theme"]

        },

...

作为上述列表中的示例,请使用以下行:

web/modules/contrib/{$name}": ["type:drupal-module"],

这设置了贡献模块的目的地,因此当安装了“drupal-module”类型的 composer 包时,它将自动移动到位置web/modules/contrib/。从上面的列表中可以看出,针对 Drupal 定义了许多不同的包,甚至有一个配置 Drush 命令 Drush。

最后一部分是drupal-core-project-message并且在首次创建包时被 drupal/core-project-message 包用于打印出一条消息。安装项目后,您可以很高兴地删除此部分,因为它仅打算使用一次。

...

        "drupal-core-project-message": {

            "include-keys": ["homepage", "support"],

            "post-create-project-cmd-message": [

                "<bg=blue;fg=white>                                                         </>",

                "<bg=blue;fg=white>  Congratulations, you’ve installed the Drupal codebase  </>",

                "<bg=blue;fg=white>  from the drupal/recommended-project template!          </>",

                "<bg=blue;fg=white>                                                         </>",

                "",

                "<bg=yellow;fg=black>Next steps</>:",

 

                "  * Install the site: https://www.drupal.org/docs/8/install",

                "  * Read the user guide: https://www.drupal.org/docs/user_guide/en/index.html",

                "  * Get support: https://www.drupal.org/support",

                "  * Get involved with the Drupal community:",

                "      https://www.drupal.org/getting-involved",

                "  * Remove the plugin that prints this message:",

                "      composer remove drupal/core-project-message"

            ]

        }

    }

}

所有这一切意味着当您运行命令创建项目时,您将看到一条消息。一旦所有 Composer 依赖项都已运行且其余的安装后操作已完成,将运行 post-coreate-project-cmd-message 部分。这将打印出以下内容。

这是composer.json文件的结尾。我已经了解了一些关于 composer 的知识,以及 Drupal 推荐的项目是如何设置为使用简单的 composer.json 文件安装所有内容的。我希望它对你也有帮助。

最后的步骤

我在上面也说过几次,composer.json一旦项目设置完成,您就可以删除文件的某些部分。基本上,一旦项目设置好,您就可以运行以下命令从代码库中正确删除 drupal/core-project-message 包。

composer remove drupal/core-project-message

然后,您可以从文件的额外部分中删除 drupal-core-project-message部分composer.json。

最好也调整composer.json文件顶部的作者元数据部分。正如我之前提到的,您只需要在本节中拥有名称、描述和许可证。像这样的东西绝对没问题。

{

    "name": "example/test",

    "description": "My custom project.",

    "license": "GPL-2.0-or-later",

...

编辑composer.json文件后,您必须运行 composer update --lock以在composer.lock文件中进行这些更改。这将确保两个文件同步。如果您想确保一切正确,只需运行composer validate,这将显示您可能遇到的文件问题。

以上是 Drupal 9:剖析 Drupal 推荐的 Composer 文件 的全部内容, 来源链接: utcz.com/z/335519.html

回到顶部