소스 코드 디렉터리 구조
Electron의 소스 코드는 주로 Chromium의 분리 규칙을 따라 몇 부분으로 나뉜다.
소스 코드를 더 잘 이해하려면 Chromium의 멀티 프로세스 아키텍처에 익숙해지는 것이 도움이 될 수 있다.
소스 코드 구조
Electron
├── build/ - GN으로 빌드할 때 필요한 설정 파일이 위치한다.
├── buildflags/ - 조건부로 빌드할 수 있는 기능들을 결정하는 파일들이 있다.
├── chromium_src/ - 콘텐츠 레이어에 속하지 않는 Chromium 소스 코드가 복사된 디렉터리다.
├── default_app/ - Electron을 실행할 때 소비자 앱을 제공하지 않으면 실행되는 기본 앱이다.
├── docs/ - Electron의 문서를 담고 있다.
| ├── api/ - Electron의 외부 모듈과 API에 대한 문서가 있다.
| ├── development/ - Electron 개발과 관련된 문서가 있다.
| ├── fiddles/ - Electron Fiddle에서 실행할 수 있는 코드 스니펫 모음이다.
| ├── images/ - 문서에 사용되는 이미지 파일이 있다.
| └── tutorial/ - Electron의 다양한 기능에 대한 튜토리얼 문서가 있다.
├── lib/ - JavaScript/TypeScript 소스 코드가 위치한다.
| ├── browser/ - 메인 프로세스 초기화 코드가 있다.
| | ├── api/ - 메인 프로세스 모듈의 API 구현이 있다.
| | └── remote/ - 메인 프로세스에서 사용되는 remote 모듈 관련 코드가 있다.
| ├── common/ - 메인과 렌더러 프로세스 모두에서 필요한 로직이 있다.
| | └── api/ - 메인과 렌더러 프로세스 모두에서 사용할 수 있는 모듈의 API 구현이 있다.
| ├── isolated_renderer/ - contextIsolation이 활성화될 때 격리된 렌더러 프로세스를 생성하는 코드가 있다.
| ├── renderer/ - 렌더러 프로세스 초기화 코드가 있다.
| | ├── api/ - 렌더러 프로세스 모듈의 API 구현이 있다.
| | ├── extension/ - Electron의 렌더러 프로세스에서 Chrome 확장 프로그램을 사용하는 코드가 있다.
| | ├── remote/ - 메인 프로세스에서 remote 모듈을 사용하는 로직이 있다.
| | └── web-view/ - 렌더러 프로세스에서 webview를 사용하는 로직이 있다.
| ├── sandboxed_renderer/ - 샌드박스된 렌더러 프로세스를 생성하는 로직이 있다.
| | └── api/ - 샌드박스된 렌더러 프로세스의 API 구현이 있다.
| └── worker/ - Web Workers에서 Node.js 환경의 기능을 올바르게 처리하는 로직이 있다.
├── patches/ - Electron의 핵심 의존성에 적용되는 패치 파일이 있다.
| | 이 패치들은 기본 기능과 사용 사례 간의 차이를 처리하기 위해 적용된다.
| ├── boringssl/ - Google의 OpenSSL 포크인 BoringSSL에 적용되는 패치가 있다.
| ├── chromium/ - Chromium에 적용되는 패치가 있다.
| ├── node/ - Node.js에 적용되는 패치가 있다.
| └── v8/ - Google의 V8 엔진에 적용되는 패치가 있다.
├── shell/ - C++ 소스 코드가 위치한다.
| ├── app/ - 시스템 진입 코드가 있다.
| ├── browser/ - 메인 윈도우, UI 및 모든 메인 프로세스 관련 코드가 있다.
| | | 이 코드는 웹 페이지를 관리하기 위해 렌더러와 통신한다.
| | ├── ui/ - 다양한 플랫폼에 대한 UI 구현 코드가 있다.
| | | ├── cocoa/ - Cocoa 관련 코드가 있다.
| | | ├── win/ - Windows GUI 관련 코드가 있다.
| | | └── x/ - X11 관련 코드가 있다.
| | ├── api/ - 메인 프로세스 API의 구현이 있다.
| | ├── net/ - 네트워크 관련 코드가 있다.
| | ├── mac/ - Mac 전용 Objective-C 코드가 있다.
| | └── resources/ - 아이콘, 플랫폼 종속 파일 등이 있다.
| ├── renderer/ - 렌더러 프로세스에서 실행되는 코드가 있다.
| | └── api/ - 렌더러 프로세스 API의 구현이 있다.
| └── common/ - 메인과 렌더러 프로세스 모두에서 사용되는 코드가 있다.
| | 여기에는 유틸리티 함수와 Node의 메시지 루프를 Chromium의 메시지 루프에 통합하는 코드가 포함된다.
| └── api/ - 공통 API의 구현과 Electron 내장 모듈의 기반 코드가 있다.
├── spec/ - 메인 프로세스에서 실행되는 Electron 테스트 스위트의 컴포넌트가 있다.
└── BUILD.gn - Electron의 빌드 규칙이 정의된 파일이다.
다른 디렉터리 구조
- .github - GitHub 관련 설정 파일을 포함한다. 이슈 템플릿, GitHub Actions를 이용한 CI, CODEOWNERS 등이 여기에 위치한다.
- dist - 배포판을 생성할 때
script/create-dist.py
스크립트에 의해 임시로 생성되는 디렉터리다. - node_modules - 빌드에 사용되는 서드파티 Node.js 모듈이 저장된다.
- npm - npm을 통해 Electron을 설치하는 로직이 담겨 있다.
- out -
ninja
의 임시 출력 디렉터리다. - script - 빌드, 패키징, 테스트 등 개발 목적으로 사용되는 스크립트가 위치한다.
script/ - Electron이 다양한 목적으로 실행하는 모든 스크립트 집합.
├── codesign/ - Electron 앱의 코드 서명을 테스트용으로 가짜로 수행한다.
├── lib/ - 다양한 Python 유틸리티 스크립트.
└── release/ - Electron 릴리스 프로세스 중 실행되는 스크립트.
├── notes/ - 새로운 Electron 버전의 릴리스 노트를 생성한다.
└── uploaders/ - 릴리스와 관련된 다양한 파일을 업로드한다.
- typings - Electron 내부 코드에 대한 TypeScript 타입 정의가 포함된다.