다양한 확장자를 지원하도록 수정하기

"확장자"

by 홍지성

이전까지는 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'},


해당 코드는 설정파일이기 때문에, 아무것도 손대지않고 그대로 사용했다.


스크린샷 2025-05-28 오전 9.52.03.png

이제 프로젝트 설정 파일들도 생각없이 사용할 수 있겠지 ...

sticker sticker


월, 수, 금, 일 연재
이전 06화내가 만드는 앱의 "화면흐름"을 자동화하기