코드 생성
모노레포를 패키지로 분할하는 것은 코드를 구조화하고, 작업 속도를 높이며, 로컬 개발 경험을 개선하는 훌륭한 방법입니다. Turborepo의 코드 생성 기능을 사용하면 패키지, 모듈, 심지어 개별 UI 컴포넌트를 위한 새로운 소스 코드를 리포지토리의 나머지 부분과 통합되는 구조화된 방식으로 쉽게 생성할 수 있습니다.
빈 패키지 추가
모노레포에 새로운 빈 앱 또는 패키지를 추가합니다.
gen workspace의 사용 가능한 모든 옵션을 확인하세요.
기존 패키지 복사
기존 워크스페이스를 새 앱 또는 패키지의 템플릿으로 사용할 수 있습니다. 이는 기존 모노레포 내의 워크스페이스와 다른 리포지토리의 원격 워크스페이스(GitHub URL을 통해 지정) 모두에서 작동합니다.
예제
리포지토리의 기존 패키지에서 복사하여 모노레포에 새 패키지를 생성합니다.
원격 패키지에서 복사하여 모노레포에 새 워크스페이스를 생성합니다.
참고: 원격 소스에서 추가할 때 Turborepo는 리포지토리에 필요한 모든 종속성이 있고 올바른 패키지 매니저를 사용하고 있는지 확인할 수 없습니다. 이 경우 새 워크스페이스가 리포지토리 내에서 예상대로 작동하도록 일부 수동 수정이 필요할 수 있습니다.
gen workspace --copy의 사용 가능한 모든 옵션을 확인하세요.
커스텀 생성기
내장 생성기가 요구 사항에 맞지 않는 경우 Plop 설정을 사용하여 자체 커스텀 생성기를 만들 수 있습니다. Turborepo는 리포지토리 내의 모든 생성기 설정을 자동으로 감지하고 명령줄에서 실행할 수 있도록 합니다.
Turborepo Generators는 Plop 위에 구축되어 있지만 리포지토리에 plop을
종속성으로 설치할 필요가 없습니다.
Turborepo는 모든 Plop 설정 옵션과 기능을 이해하지만, Turborepo로 구성된 리포지토리 내에서 생성기를 작성하는 경험을 개선하기 위한 몇 가지 추가 기능을 제공합니다.
- 생성기는 워크스페이스별로 자동으로 검색, 로드 및 구성됩니다(단일 설정 파일 내에서 수동으로
load할 필요 없음) - 생성기는 정의된 워크스페이스의 루트에서 자동으로 실행됩니다
- 생성기는 리포지토리 내 어디서나 호출할 수 있습니다(또는
--root플래그를 통해 외부에서도 가능) - TypeScript 생성기는 별도의 설정 없이 지원됩니다
plop은 리포지토리의 종속성으로 설치할 필요가 없습니다
알려진 문제
ESM 종속성은 현재 커스텀 생성기 내에서 지원되지 않습니다.
시작하기
커스텀 생성기를 빌드하고 실행하려면 Turborepo를 사용하는 모노레포 내 어디서나 다음 명령을 실행하세요.
기존 생성기를 선택하거나 아직 없는 경우 생성하라는 메시지가 표시됩니다. 리포지토리의 루트에 있는 turbo/generators/config.ts(또는 config.js) 또는 임의의 워크스페이스 내에서 수동으로 설정을 생성할 수도 있습니다.
TypeScript를 사용하는 경우 필요한 TS 타입에 액세스하려면 the @turbo/gen
package를
devDependency로 설치해야 합니다.
예를 들어, 다음은 생성기를 위한 세 가지 위치가 있는 모노레포를 보여줍니다:
워크스페이스 내에서 생성된 생성기는 리포지토리 루트나 생성기 설정 위치가 아닌 워크스페이스 루트에서 자동으로 실행됩니다.
이를 통해 생성기를 더 간단하게 작성할 수 있습니다. [workspace-root]에 파일을 생성할 때 ../../<file>이 아닌 <file>로만 지정하면 됩니다.
Plop을 사용한 커스텀 생성기 생성에 대해 자세히 알아보세요.
생성기 작성
생성기 설정 파일은 Plop 설정 객체를 반환하는 함수입니다. 설정 객체는 생성기의 프롬프트와 작업을 정의하는 데 사용됩니다.
가장 간단한 형태의 생성기 설정 파일은 다음과 같습니다:
프롬프트
프롬프트는 Plop prompts를 사용하여 작성되며 사용자로부터 정보를 수집하는 데 사용됩니다.
작업
작업은 내장 Plop 작업 또는 직접 정의한 커스텀 작업 함수를 사용할 수 있습니다:
생성기 실행
생성기 설정 파일을 만든 후에는 선택 프롬프트를 건너뛰고 지정된 생성기를 직접 실행할 수 있습니다:
--args를 사용하여 생성기 프롬프트에 인수를 직접 전달할 수도 있습니다:
자세한 내용은 Plop 문서의 프롬프트 우회를 참조하세요.
gen의 사용 가능한 모든 옵션을 확인하세요.