템플릿
아키텍처가 정립된 프로젝트에서는 개발자가 프로젝트와 일관된 새 컴포넌트나 기능을 빠르게 시작하고자 할 수 있습니다. 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이라는 템플릿을 생성한다면, Tuist/Templates에 framework라는 새 디렉터리를 만들고 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로 충분한 유연성을 확보하기 어렵다면, .file 케이스를 통해 Stencil 템플릿 언어를 활용할 수 있습니다. 또한 여기에 정의된 추가 필터를 사용할 수도 있습니다.
문자열 보간을 사용하면 위의 \(nameAttribute)가 {{ name }}로 해결됩니다. 템플릿 정의에서 Stencil 필터를 사용하려면 해당 보간을 수동으로 사용하고 원하는 필터를 추가할 수 있습니다. 예를 들어, name 속성의 소문자 값을 얻기 위해 \(nameAttribute) 대신 { { name | lowercase } }를 사용할 수 있습니다.
전체 폴더를 지정된 경로로 복사할 수 있는 .directory도 사용할 수 있습니다.
템플릿은 프로젝트 설명 헬퍼를 사용하여 템플릿 간에 코드를 재사용할 수 있습니다.