์์์ ํ๋ฆ๋๋ก ์ผ๋จ ์ ๋ฆฌ
๊ฐ์ฅ ๊ถ๊ธํ๋ ์ ์ main process์ renderer process์ electron ๋ชจ๋์ด ์ฃผ์ ๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ฐ๊ตฌ
- electron์์๋ 2014๋
๋ถํฐ gin์ด๋ผ๊ณ ํ๋ chromium์์ ์ฌ์ฉ๋๋ v8 <-> C++๋ฅผ ์ฐ๋ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์
electron_api_browser_window.cc:539์์๋export๊ฐ์ฒด์BrowserWindowํด๋์ค๋ฅผ ๋ฑ๋กํ๊ณ ์์
- electron_api_(feature).{cc,h}์์ ํ์ธํ ์ ์์
- third_party/electron_node/... -> Node.js ํ๋ก์ ํธ (.gclient_entries ํ์ธ)
- ๊ฐ electron API์ Intialize ์๊ทธ๋์ณ์ ๋ํ ์ ๋ณด: https://nodejs.org/api/addons.html#addons_context_aware_addons
Windows ๊ธฐ์ค์ผ๋ก ๋ณด๋ ์ ๋ฆฌ ์ค
- shell/app/browser/*
- app, BrowserWindow, WebContents
- shell/app/render/*
- ipcRenderer
- https://cameronnokes.com/blog/deep-dive-into-electron's-main-and-renderer-processes/
- https://stackoverflow.com/questions/9475792/how-does-require-in-node-js-work
-
module_system.cc
- ModuleSystem::AddRoutes
- require, loadScript ์ฐธ๊ณ
- ModuleSystem::AddRoutes
-
builtins-api.cc ~> electron ๋ชจ๋ ๊ฐ์ฒด ์์ฑ์ ํธ์ถ๋จ
-
third_party/electron_node/src/node.cc
StartExecution- (lib/)internal/main/run_amin_module.js
-
third_party/electron_node/src/api/environment.cc
LoadEnvironment
-
third_party/electron_node/src/node_main_instance.cc
-
shell/browser/api/electron_api_event_emitter.cc
- SetEventEmitterPrototype
- EventEmitter๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์?
- native require์์๋ internal ๋ชจ๋๋ง ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์
- require('module').createRequire()๋ฅผ ํตํด์ ์ ๊ทผํด์ผํ๋ค.
- shell/browser/event_emitter_mixin.cc
- SetEventEmitterPrototype