Skip to content
Back to skills

Bungae Bundler

ASecurity

Bungae React Native 번들러 개발 가이드. 번들링 구현, 설정 시스템, 개발 서버, Babel 통합 등 번들러 개발 작업 시 참조. Resolution, Transformation, Serialization 파이프라인 구현 및 Metro 호환성 유지에 활용.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
developmentjavascripttypescriptgojavareactnodetestinggitapidocumentation

Works with

  • api

Security analysis

A100/100

Pro scans all 13 files and shows the line behind each finding

Scanned September 27, 2026

npx -y skills add David-Li0406/meta-skill-evloving --skill bungae-bundler --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Bungae Bundler?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Bungae Bundler
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/david-li0406-bungae-bundler/badge)](https://www.skillsdirectory.com/skills/david-li0406-bungae-bundler)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: bungae-bundler
description: Bungae React Native 번들러 개발 가이드. 번들링 구현, 설정 시스템, 개발 서버, Babel 통합 등 번들러 개발 작업 시 참조. Resolution, Transformation, Serialization 파이프라인 구현 및 Metro 호환성 유지에 활용.
license: MIT
metadata:
  author: ohah
  version: '0.0.1'
---

# Bungae Bundler Development Guide

Bun 기반 React Native 번들러 개발을 위한 종합 가이드.
Metro 호환성을 유지하면서 Bun의 성능 이점을 최대한 활용.

## When to Apply

다음 작업 시 참조:

- 번들링 파이프라인 구현 (Resolution, Transformation, Serialization)
- 설정 시스템 구현 또는 수정
- 개발 서버 및 HMR 구현
- Babel 선택적 통합 작업
- 캐싱 및 최적화 구현
- Metro 호환성 관련 작업

## Rule Categories

| Category      | File                         | Description                            |
| ------------- | ---------------------------- | -------------------------------------- |
| Overview      | `rules/overview.md`          | 프로젝트 구조 및 로드맵                |
| Bundling      | `rules/bundling.md`          | 3단계 번들링 프로세스                  |
| Resolution    | `rules/resolution.md`        | 모듈 해석 전략 (Bun.build + Plugin)    |
| Config        | `rules/config.md`            | 설정 시스템 스키마                     |
| Transformer   | `rules/transformer.md`       | 코드 변환 및 Babel 통합                |
| Dev Server    | `rules/dev-server.md`        | 개발 서버 및 HMR                       |
| Incremental   | `rules/incremental-build.md` | 증분 빌드 시스템                       |
| Optimization  | `rules/optimization.md`      | 캐싱 및 성능 최적화                    |
| Bun APIs      | `rules/bun-apis.md`          | Bun API 활용 가이드                    |
| Bunup         | `rules/bunup.md`             | Bunup 빌드 도구 가이드                 |
| Testing       | `rules/testing.md`           | 테스트 코드 작성 가이드 (Metro 스타일) |
| Documentation | `rules/documentation.md`     | 문서 작성 가이드 (영어 기본 + 한국어)  |

## Quick Reference

### 기술 스택

| 항목        | 선택          | 이유                              |
| ----------- | ------------- | --------------------------------- |
| 런타임      | Bun           | 빠른 JS 런타임, 내장 트랜스파일러 |
| 빌드        | Bunup         | Bun 네이티브 라이브러리 빌드      |
| Lint/Format | oxlint, oxfmt | 빠른 린팅/포매팅                  |

**⚠️ Bunup 사용 시 주의사항**

bunup 관련 작업(설정, 옵션, 플러그인 등)을 할 때는 **반드시** 공식 웹 스펙 문서를 참조하세요:

- **공식 문서**: https://bunup.dev/docs/guide/options.html
- bunup의 옵션, 설정, 플러그인 시스템 등은 공식 문서를 기준으로 사용해야 합니다.
- 프로젝트 내부 문서보다 공식 스펙 문서가 최신이고 정확합니다.

### 번들링 3단계

```
Entry → [Resolution] → [Transformation] → [Serialization] → Bundle
```

1. **Resolution**: 모듈 경로 해석 (플랫폼별 확장자, node_modules)
2. **Transformation**: 코드 변환 (Bun 내장 우선, Babel 선택적)
3. **Serialization**: 번들 생성 (Plain, RAM Bundle)

### Transformer 전략: Metro 호환 변환 순서

Metro의 변환 파이프라인을 따르되, 각 도구가 가장 잘하는 작업을 담당:

```
1. Hermes Parser Plugin - Flow + JSX 파싱 (Babel only)
2. Flow Enum Transform   - Flow enum 처리 (Babel only)
3. Flow Type Stripping   - Flow 타입 제거 (Babel only)
4. ESM → CJS Conversion  - 모듈 변환 (SWC - fast)
5. JSX Transformation    - JSX 변환 (SWC - fast)
```

| 단계 | 도구           | 역할                | 이유                                |
| ---- | -------------- | ------------------- | ----------------------------------- |
| 1-3  | Babel + Hermes | Flow 파싱/타입 제거 | Hermes parser만 Flow 구문 처리 가능 |
| 4    | SWC            | ESM → CJS 변환      | Babel보다 빠름                      |
| 5    | SWC            | JSX 변환            | 빠른 JSX 변환                       |

### 점진적 Babel 제거 계획

현재 Flow 처리를 위해 Babel을 사용하지만, 장기적으로 Babel 의존성을 최소화할 계획:

- **Phase 1 (현재)**: Flow 파일용 Babel + SWC로 나머지 변환
- **Phase 2**: Hermes Parser 직접 통합 - Babel 없이 Hermes Parser AST 조작으로 Flow 타입 제거 구현
  - 참고: https://github.com/facebook/hermes/tree/main/lib/Parser
  - Hermes Parser는 React Native의 공식 파서로, Flow 구문을 네이티브 지원
  - Babel 의존성 제거 및 성능 향상 기대
- **Phase 3**: SWC Flow 지원 대기 (대안) 또는 전체 파이프라인을 SWC로 통합
- **Phase 4**: Babel은 특수 플러그인 필요 시에만 사용 (reanimated, styled-components 등)

### Babel이 필수인 케이스

| 라이브러리/기능         | 이유                 | 대안               |
| ----------------------- | -------------------- | ------------------ |
| Flow 코드               | Hermes parser만 가능 | SWC Flow 지원 대기 |
| react-native-reanimated | worklet 변환         | 대안 없음          |
| styled-components       | displayName 주입     | 대안 없음          |
| decorator 문법          | @observable 등       | 대안 없음          |

### 주요 Bun API

```typescript
Bun.file(); // 파일 I/O
Bun.serve(); // HTTP 서버
Bun.build(); // 번들링
Bun.Transpiler; // 코드 변환
```

## Implementation Roadmap

### Phase 1: 핵심 번들링

- [x] **Config 시스템** (플랫폼 정보 등 설정)
  - ✅ Config 로딩 (`bungae.config.ts/js/json`, `package.json`)
  - ✅ Config 병합 및 기본값 처리
  - ✅ Config 검증 로직
  - ✅ Server config 추가
  - ✅ Metro-compatible API (`loadConfig({ config, cwd })`)
  - ✅ Metro 스타일 테스트 코드 (11개 테스트 케이스)
- [x] **Platform Resolver Plugin** (`.ios.js`, `.android.js` 해석)
  - ✅ Bun Plugin으로 플랫폼 확장자 처리
  - ✅ `.ios.js`, `.android.js`, `.native.js` 지원
  - ✅ TypeScript 확장자 지원 (`.ios.tsx`, `.android.ts` 등)
  - ✅ `preferNativePlatform` 옵션 지원
- [x] **코드 변환 (Transformation)** - Bun.Transpiler 기본 + 선택적 Babel
  - ✅ Bun.Transpiler 기반 변환 구현
  - ✅ TypeScript/TSX/JSX → JavaScript 변환
  - ✅ 의존성 추출 (require, import, dynamic import)
  - ✅ Babel 선택적 통합 스켈레톤 (Phase 2에서 구현)
  - ✅ Metro 스타일 테스트 코드 (10개 테스트 케이스 모두 통과)
- [x] **Serialization** - Metro 호환 번들 형식
  - ✅ baseJSBundle 구현 (Metro 호환)
  - ✅ metro-runtime 번들 포함
  - ✅ prelude, polyfills 지원
  - ✅ **d(), **r() 형식 지원
  - ✅ 모듈 ID 생성 및 정렬
  - ✅ Source map URL 지원
  - ✅ SerializerOptions에 Metro 호환 옵션 추가 (inlineSourceMap, shouldAddToIgnoreList, includeAsyncPaths, modulesOnly, asyncRequireModulePath, getSourceUrl)
  - ✅ modulesOnly 옵션 구현 (prelude/runtime 제외)
  - ✅ inlineSourceMap 옵션 스켈레톤 추가 (Phase 2에서 완전 구현 예정)
  - ✅ InitializeCore 자동 감지 및 runBeforeMainModule 처리
  - ✅ sourceUrl, sourceMapUrl 옵션 사용 (개발 서버)
  - ✅ Metro 스타일 테스트 코드 (6개 Metro 테스트 통과, 2개 skip, InitializeCore 테스트 포함)

**⚠️ Resolution 구현 전략**:

- Bun.build()의 기본 해석을 활용
- 플랫폼 확장자만 Plugin으로 추가 처리
- 완전히 새로 구현할 필요 없음

### Phase 2: 개발 환경 (증분 빌드 포함)

- [ ] **증분 빌드 시스템** (핵심)
  - [ ] 의존성 그래프 (Graph)
  - [ ] 델타 계산기 (DeltaCalculator)
  - [ ] 변환 캐시 (TransformCache)
  - [ ] 순환 참조 GC
- [ ] 개발 서버 (Bun.serve)
- [ ] 파일 감시 (fs.watch)
- [ ] HMR (WebSocket + 증분 업데이트)

**📌 증분 빌드를 Phase 2에 넣는 이유:**

- 개발 서버와 HMR의 핵심 의존성
- 파일 변경 → 변경분만 재빌드 → HMR 전송
- Phase 3 최적화와 별개로 필수 기능

상세 구현: `rules/incremental-build.md`

### Phase 3: 최적화

- [ ] 영구 캐싱 (디스크)
- [ ] Minification
- [ ] Tree Shaking

### Phase 4: 고급 기능

- [ ] RAM Bundle
- [ ] Fast Refresh
- [ ] 플러그인 시스템
- [ ] require.context
- [ ] Lazy/Async 모듈

## Metro 호환성 및 제외된 기능

### Phase 1-3에서 구현하지 않은 기능 (Phase 2 또는 Phase 3에서 구현 예정)

다음 기능들은 Metro에 있지만 Phase 1-3에서는 구현하지 않았으며, Phase 2 또는 Phase 3에서 구현할 예정입니다:

1. **inlineSourceMap 옵션** (스켈레톤 완료, 완전 구현 예정)
   - **Metro에서의 용도**: Source map을 번들 파일에 인라인으로 포함 (base64 인코딩)
   - **현재 상태**: 옵션 타입 및 스켈레톤 구현 완료, 실제 source map 생성 로직은 Phase 2에서 구현 예정
   - **구현 시점**: Phase 2 또는 Phase 3
   - **관련 테스트**: `should add an inline source map to a very simple bundle` (Metro 테스트, skip 상태)

2. **x_google_ignoreList 생성** (옵션 완료, 생성 로직 예정)
   - **Metro에서의 용도**: Chrome DevTools에서 특정 소스 파일을 디버깅에서 제외하기 위한 source map 메타데이터
   - **현재 상태**: `shouldAddToIgnoreList` 옵션 추가 완료, `x_google_ignoreList` 생성 로직은 Phase 2에서 구현 예정
   - **구현 시점**: Phase 2 또는 Phase 3
   - **관련 테스트**: `emits x_google_ignoreList based on shouldAddToIgnoreList` (Metro 테스트, skip 상태)

3. **Asset 지원**
   - **Metro에서의 용도**: 이미지, 폰트 등 정적 자산을 번들에 포함
   - **현재 상태**: 기본 번들링 테스트에서는 asset 없이도 핵심 기능 검증 가능
   - **구현 시점**: Phase 3 또는 Phase 4 (필요 시)
   - **관련 테스트**: Metro의 `basic_bundle/Foo.js`는 `require('./test.png')`를 사용
   - **참고**: 현재는 JavaScript/TypeScript 모듈 번들링에 집중

4. **TypeScript 모듈 통합 테스트**
   - **Metro에서의 용도**: TypeScript 파일을 번들에 포함하고 실행 검증
   - **현재 상태**: TypeScript 변환은 지원하지만, Metro의 `TypeScript.ts` 모듈 통합 테스트는 미구현
   - **구현 시점**: Phase 3 또는 Phase 4 (필요 시)
   - **관련 테스트**: Metro의 `basic_bundle/TypeScript.ts`는 복잡한 TypeScript 기능 테스트
   - **참고**: 현재는 기본 TypeScript 변환만 테스트 (별도 테스트 케이스 존재)

### 테스트 일치성 관련 이슈

현재 통합 테스트는 Metro와 동일한 스타일(`execBundle` + `toMatchSnapshot()`)을 사용하지만, 테스트 파일이 다르기 때문에 snapshot 결과가 다릅니다:

1. **테스트 파일 차이**
   - **Metro**: `TestBundle.js`가 `{Foo, Bar, TypeScript}`를 export
   - **Bungae**: `TestBundle.js`가 `{Foo, Bar}`만 export (TypeScript 모듈 없음)
   - **영향**: Snapshot 결과가 다름 (Metro는 3개 모듈, Bungae는 2개 모듈)

2. **Asset 의존성 차이**
   - **Metro**: `Foo.js`가 `require('./test.png')`를 사용하여 asset을 포함
   - **Bungae**: `Foo.js`가 간단한 객체만 export (asset 없음)
   - **영향**: Metro의 snapshot에는 `asset` 객체가 포함되지만, Bungae에는 없음

3. **의존성 구조 차이**
   - **Metro**: `Bar.js`가 `Foo.js`를 require하여 `Foo.type`을 참조
   - **Bungae**: `Bar.js`와 `Foo.js`가 독립적
   - **영향**: Metro의 snapshot은 `Bar.foo: "foo"`를 포함하지만, Bungae는 독립적인 구조

**참고**: 현재 테스트는 핵심 번들링 기능(의존성 해석, 변환, 직렬화, require 경로 변환)을 검증하는 데 충분합니다. Asset과 TypeScript 모듈 통합 테스트는 위의 백로그 항목으로 관리됩니다.

### 구현하지 않는 Metro 기능

다음 기능들은 Metro에 있지만 Bungae에서는 구현하지 않습니다:

#### 1. cacheStores (callback 패턴)

**Metro에서의 용도**:

- 변환 결과 캐싱을 위한 커스텀 캐시 백엔드 지원
- `cacheStores: (MetroCache) => [new CustomStore()]` 형태로 `MetroCache`를 주입받아 커스텀 스토어 생성
- FileStore 외에도 메모리 캐시, Redis 등 다양한 캐시 백엔드 지원

**Bungae에서 제외하는 이유**:

- Bun은 자체 캐시 시스템을 제공하거나 다른 방식으로 캐시를 관리할 수 있음
- 롤리팝도 자체 캐시 시스템(`FileSystemCache`)을 사용하며 Metro의 `cacheStores` 패턴을 사용하지 않음
- Bun의 내장 기능을 활용하는 것이 더 효율적

#### 2. YAML config 지원

**Metro에서의 용도**:

- 레거시 프로젝트 호환성: 과거에 YAML config를 사용하던 프로젝트 지원
- **Deprecated 상태**: 경고 메시지를 표시하며 JavaScript config로 마이그레이션을 권장

**Bungae에서 제외하는 이유**:

- 레거시 지원이 필요 없음 (새로운 프로젝트)
- JavaScript/TypeScript config만 지원해도 충분
- 롤리팝도 YAML을 지원하지 않음
- Metro에서도 deprecated 상태이므로 새 프로젝트에서 구현할 필요 없음

**참고**: Metro 코드에서 YAML 지원은 다음과 같이 deprecated 처리되어 있습니다:

```javascript
console.warn(
  'YAML config is deprecated, please migrate to JavaScript config (e.g. metro.config.js)',
);
```

## Reference

- Metro: `reference/metro/packages/`
- Rollipop: `reference/rollipop/packages/rollipop/`

Files in this skill

  • SKILL.md13.5 KB
  • rules/bun-apis.md2.4 KB
  • rules/bundling.md4.4 KB
  • rules/bunup.md1.9 KB
  • rules/config.md5.6 KB
  • rules/dev-server.md6.6 KB
  • rules/documentation.md1.7 KB
  • rules/incremental-build.md10.5 KB
  • rules/optimization.md2.3 KB
  • rules/overview.md2.9 KB
  • rules/resolution.md5.7 KB
  • rules/testing.md7.4 KB
  • rules/transformer.md7.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…