"확장자"
이전까지는 tsx 로 끝나는 파일만 만들었기 때문에, 다른 파일은 템플릿을 만들 수 없는 코드였다.
그래서 템플릿을 생성하기 위한 코드에 확장자 속성을 추가해서 조금 더 부드럽게 만들었다.
확장자 속성 - ext: string;
템플릿 생성하는 코드
import fs from 'fs';
import Handlebars from 'handlebars';
type FileInfo = {
path: string;
name: string;
ext: string;
};
const fileInfoList: FileInfo[] = [
{path: 'src/ui/navigation/navigators', name: 'DrawerNavigator', ext: 'tsx'},
{path: 'src/ui/navigation', name: 'RootNavigation', ext: 'tsx'},
];
const generate = (fileInfo: FileInfo) => {
// 1. 템플릿 불러오기
const templateSource = fs.readFileSync(
`./src/automationReactNative/templates/${fileInfo.name}.hbs`,
'utf-8',
);
// 2. 핸들바 템플릿 컴파일
const template = Handlebars.compile(templateSource);
// 3. 템플릿에 데이터 적용
const resultCode = template({});
// 4. 결과 코드 파일로 저장
const outputDir = `./output/${fileInfo.path}`;
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, {recursive: true});
}
const filePath = `${outputDir}/${fileInfo.name}${fileInfo.ext ? '.' + fileInfo.ext : ''}`;
fs.writeFileSync(filePath, resultCode);
console.log('코드 생성 완료:', filePath);
};
// 5. 모든 파일 템플릿 생성하기
fileInfoList.forEach(fileInfo => {
generate(fileInfo);
});
이제 tsx로 끝나지 않는 프로젝트 설정 파일들에 해당하는 템플릿도 추가해 보았다.
{path: '', name: '.gitignore', ext: ''},
{path: '', name: '.prettierignore', ext: ''},
{path: '', name: 'package', ext: 'json'},
{path: '', name: 'tsconfig', ext: 'json'},
해당 코드는 설정파일이기 때문에, 아무것도 손대지않고 그대로 사용했다.
이제 프로젝트 설정 파일들도 생각없이 사용할 수 있겠지 ...
