构建设置和同步工具

安装: 51 817

依赖项: 2

建议者: 0

安全: 0

星星: 136

关注者: 24

分支: 15

开放问题: 4

类型:craft-plugin

4.1.2 2019-02-10 12:32 UTC

README

Schematic 允许您在不同的环境中同步您的 Craft 设置。它通过将有关资产、数据库(字段、部分、用户)、区域和插件的信息导出到一个可以导入到其他环境的 YAML 文件来实现。

❗ Craft 3.1 注意

Craft 3.1 引入了一个项目配置,将提供大部分(如果不是全部)schematic 功能。我们将继续支持 schematic,但它似乎可能变得过时。

目前 Schematic 在 Craft 3.1 或更高版本上无法运行!

安装

您可以使用 Composer 安装此工具。从项目的根目录运行以下命令

composer require nerds-and-company/schematic

这将把 nerds-and-company/schematic 添加到项目的 composer.json 文件中,并将源代码安装到 vendor/nerds-and-company/schematic 目录中。

Schematic 现在可以在 Craft 中作为可安装的插件使用。您可以在 cp 中安装它或使用 ./craft install/plugin schematic

使用方法

基本使用

此工具最常用的用法模式,从开发环境同步到生产环境,将会是

  1. 在本地创建一个 Craft 项目
  2. 设置所有所需的插件、部分、模板等
  3. 在本地运行 Schematic 导出
  4. 如果使用版本控制系统,可以将模式文件提交到本地存储库
  5. 将 Craft 应用程序部署到生产环境
  6. 在远程运行 Schematic 导入

或者,从生产环境同步到开发环境

  1. 在远程运行 Schematic 导出
  2. 将模式文件拉取到本地
  3. 如果使用版本控制系统,可以将模式文件提交到本地存储库
  4. 在本地运行 Schematic 导入

导出

通过运行以下命令创建导出

./craft schematic/export

要跳过导出特定类型的数据,可以在以下形式中指定排除项

./craft schematic/export --exclude=volumes

也可以指定多个排除项

./craft schematic/export --exclude=volumes,categoryGroups

同样,也可以仅导出数据类型的子集

./craft schematic/export --include=volumes,categoryGroups

参见 [支持的数据类型](#支持的数据类型)

导出将在 config/schema.yml 生成一个模式文件。文件路径可以使用 --file 标志更改,例如 craft schematic/export --file=path/to/my-schema.yml

导入

要使用 schematic 运行导入,需要一个模式文件。可以通过运行以下命令创建导入

./craft schematic/import

默认情况下,schematic 将查看 config/schema.yml。要更改 schematic 查找模式文件的路径,请使用 --file 标志。

可选地,可以使用 --force 标志来删除导入文件中未提及的任何项目。

警告!! 这也将删除任何 相关 内容。

要跳过导入特定类型的数据,可以在以下形式中指定排除项

./craft schematic/import --exclude=volumes

也可以指定多个排除项

./craft schematic/import --exclude=volumes,categoryGroups

参见 [支持的数据类型](#支持的数据类型)

支持的数据类型

以下是所有数据类型及其对应的排除参数值的列表

覆盖和环境变量

可以通过在 config/override.yml 中添加一个键并设置相应的环境变量来覆盖特定的键。在 override.yml 中的键名需要与要从 schema.yml 中覆盖的键相同,包括任何父键名。

覆盖文件在导出时也会被应用,因此您的变量不会被实际值覆盖。原理图也支持使用--override-file标志传递覆盖文件,例如:./craft schematic/import --override-file=路径/to/你的/config/override.yml

示例

如果以下override.yml已定义

parent:
    key_name: %KEY_VALUE%

则需要设置环境变量KEY_VALUE。此环境变量的值将覆盖键key_name。如果未设置环境变量,Schematic将抛出错误。

环境变量也可以直接在schema.yml文件中使用。请注意,如果这样做,它们将在导出时被其环境变量的值覆盖。

事件

可以使用EVENT_RESOLVE_CONVERTER事件注入自定义转换器。这对于导入和导出自定义字段类型特别有用。转换器需要实现NerdsAndCompany\Schematic\Interfaces\ConverterInterface

Event::on(Schematic::class, Schematic::EVENT_RESOLVE_CONVERTER, function (ConverterEvent $event) {
    if ($event->modelClass = "My\Custom\Field") {
      $event->converterClass = "My\Custom\FieldConverter";
    }
});

可以使用EVENT_MAP_SOURCE事件注入自定义源映射。这对于导入和导出自定义源特别有用。

Event::on(Schematic::class, Schematic::EVENT_MAP_SOURCE, function (SourceMappingEvent $event) {
    list($sourceType, $sourceFrom) = explode(':', $event->source);

    switch ($sourceType) {
        case 'plugin-source':
            $event->service = Craft::$app->customService;
            $event->method = 'getCustomModelBy';
            break;
    }
});

注意事项

Schematic使用句柄来标识内容。当方案文件中的句柄发生变化,并且以强制方式运行导入时,将创建一个新的内容类型,并删除旧的内容类型!

建议使用Craft内容迁移更改内容类型句柄,并在运行Schematic导入之前运行这些迁移。

许可

本项目已根据MIT许可(MIT)授权。有关更多信息,请参阅许可文件

变更日志

CHANGELOG.md

致谢

灵感来自并基于出色的ArtVandelay插件,并由这些出色的个人构建