예제
- 지정 경로 하위의 모든
*.sql.ts
패턴의 파일들을 로드
- 해당 파일들에서는
export default
를 통해 스트링을 내보냄
- 로드된 모든 파일들에서
export default
변수들을 추출하여 글로벌 범위로 저장
예시: example.sql.ts
export default
`
SELECT 1
`;
[1] global-sql-cache.ts
import * as path from 'path';
import * as glob from 'glob';
export const sqlCache: {
path: string;
query: string;
}[] = [];
/** 모든 .sql.ts 파일 내용을 캐시에 저장 (리턴: 저장된 개수) */
export function CreateSqlCache(rootDir: string) {
// 하위 디렉토리에서 *.sql.ts 패턴을 가진 파일들 찾기
const pattern = '**/*.sql.ts';
const sqlFiles = glob.sync(pattern, { cwd: rootDir });
// 파일 내용을 읽어와서 변수 추출
sqlFiles.forEach((file) => {
const filePath = path.join(rootDir, file);
// CommonJS require 사용 (TypeScript의 import로는 동적으로 파일을 가져오기 어려움)
const fileContent = require(filePath);
// 파일에서 export default 된 변수가 존재하는 경우 저장
if (fileContent && typeof fileContent.default !== 'undefined') {
sqlCache.push({ path: filePath, query: fileContent.default });
}
});
return sqlCache.length;
}
[2] 호출자: server.ts
async function runApp() {
const app = new Koa();
if(serverConfig.isDevMode) {
const sqlCacheSize = CreateSqlCache(`${__dirname}/api`);
console.log(`SQL Cache Generated: ${sqlCacheSize}`)
}
// ...
}