Шаблоны
В проектах с устоявшейся архитектурой разработчики могут захотеть создать новые компоненты или возможности, соответствующие проекту. С помощью tuist scaffold можно генерировать файлы из шаблона. Вы можете определить собственные шаблоны или использовать те, что поставляются вместе с Tuist. Вот несколько сценариев, где использование шаблонизации может быть полезно:
- Создать новую возможность, следующую заданной архитектуре:
tuist scaffold viper --name MyFeature. - Создать новые проекты:
tuist scaffold feature-project --name Home
Tuist не навязывает подход к содержимому ваших шаблонов и целям их использования. Единственное требование — они должны находиться в определённой директории.
Определение шаблона#
Чтобы определить шаблоны, выполните tuist edit, затем создайте директорию с именем name_of_template внутри Tuist/Templates, которая будет представлять ваш шаблон. Для шаблонов требуется файл манифеста name_of_template.swift, описывающий шаблон. Например, если вы создаёте шаблон с именем framework, создайте новую директорию framework по пути Tuist/Templates с файлом манифеста framework.swift, который может выглядеть так:
import ProjectDescription
let nameAttribute: Template.Attribute = .required("name")
let template = Template(
description: "Custom template",
attributes: [
nameAttribute,
.optional("platform", default: "ios"),
],
items: [
.string(
path: "Project.swift",
contents: "My template contents of name \(nameAttribute)"
),
.file(
path: "generated/Up.swift",
templatePath: "generate.stencil"
),
.directory(
path: "destinationFolder",
sourcePath: "sourceFolder"
),
]
)
Использование шаблона#
После определения шаблона его можно использовать через команду scaffold:
tuist scaffold name_of_template --name Name --platform macos
Поскольку параметр platform является необязательным, команду можно вызывать без аргумента --platform macos.
Если .string и .files не обеспечивают достаточной гибкости, можно воспользоваться языком шаблонов Stencil через вариант .file. Кроме того, можно использовать дополнительные фильтры, описанные здесь.
При использовании интерполяции строк выражение \(nameAttribute) выше разрешится в {{ name }}. Если вы хотите использовать фильтры Stencil в определении шаблона, можно задать эту интерполяцию вручную и добавить любые нужные фильтры. Например, вместо \(nameAttribute) можно использовать { { name | lowercase } }, чтобы получить значение атрибута name в нижнем регистре.
Также можно использовать .directory, что позволяет копировать целые папки по указанному пути.
Шаблоны поддерживают использование хелперов ProjectDescription для повторного использования кода между шаблонами.