ES6-module-import.md
๐กModern JavaScript Development: Modules and Tooling
Building a Morden Javascript Application modern JavaScript Development use modules, 3rd-party packages
Build Process & JavaScript Bundle
| ๋น๋ ๊ณผ์ | ๋ด์ฉ | | ---------- | ----------------------- | | bundling | ๋ชจ๋์ ํ๋๋ก ํฉ์นฉ๋๋ค. | | transpling & polyfilling | ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ES5 ์ด์ ์ผ๋ก convert ํฉ๋๋ค. |
๐ก JavaScript๋ฅผ ํธ๋์คํ์ผ๋งํ๋ ๊ธฐ์ค์ ์ ES6 (ES2015)์ธ๊ฐ์?
Babel์ JavaScript ์ฝ๋๋ฅผ ํธ๋์คํ์ผ(transpile)ํ๋ ๋๊ตฌ์ ๋๋ค. ํธ๋์คํ์ผ๋ง์ ์๋ก์ด JavaScript ๋ฌธ๋ฒ์ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์์๋ ์คํ ๊ฐ๋ฅํ๋๋ก ์ด์ ๋ฒ์ ์ JavaScript ์ฝ๋๋ก ๋ณํํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
ES6๋ JavaScript์ ์๋ก์ด ๋ฒ์ ์ผ๋ก, ๋ง์ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ฒ ์์ฑํ๋๋ฐ ๋์์ด ๋๊ณ , ๊ฐ๋ฐ์๋ค์ ํจ์จ์ ๋์ฌ์ค๋๋ค. ์๋ฅผ๋ค์ด, ํ์ดํ ํจ์, ๋ธ๋ก ์ค์ฝํ ๋ณ์, ํด๋์ค, ๋ชจ๋ ๋ฑ์ ์ฝ๋๋ฅผ ๊ฐ๋จํ๊ฒ ์์ฑํ๊ณ ์ดํดํ๋๋ฐ ๋์์ ์ค๋๋ค.
Software development?
| ๊ณผ์ | ๋ด์ฉ & ๊ตฌ์ฑ | ์ฌ์ฉ | | --- | --- | --- | | development | modules, 3rd-party package๋ก ๊ตฌ์ฑ | package manager : npm, nodeJS | | build process | building๊ณผ transpilng, polyfilling ๊ณผ์ | bundler : webpack & parcel, transplier : babel | | production | ๋น๋ฉ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ JavaScript ๋ฒ๋ค | |
Module์?
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ & ์ฝ๋๋ฅผ ์บก์ํํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก module์ ๋
๋ฆฝ์ ์ธ ํ์ผ(standalone file)๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- import & export
- import : dependency
- export : public api
- import & export
Module์ ์ฅ์
- ๊ตฌ์ฑ ์์๋ฅผ ๋ถ๋ฆฌ Compose software
- ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฆฝํ Isolate component
- ์ถ์ํ Abstract code
- ์ฝ๋๋ฅผ ์ ๋ฆฌ Organized code
- ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ Reuse code
ES6 Module vs Script
| | ES6 Module | Script | ์ค๋ช | | --- | --- | --- | --- | | top-level variables | ๋ชจ๋ socpe ๋ด | global | ES6 module์ ๋ณ์ ํ๊ฒฝ์ ํด๋น ๋ชจ๋ ๋ด๋ถ์์ ์์๋ณผ ์ ์์ต๋๋ค.(์ธ๋ถ์์ ๋ณ์๋ฅผ ์์๋ณด๋ ค๋ฉด ๋ณ์๋ฅผ export ํฉ๋๋ค.) | | default mode | strict mode | sloppy mode | ES6 module์ ๊ธฐ๋ณธ์ ์ผ๋ก strict ๋ชจ๋์ ๋๋ค. (strict ๋ชจ๋๋ฅผ ์ต์๋จ์์ ์ง์ ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค.) | | top-level์ this | undefined | window | ES6 module์์ top-level this๋ undefined์ ๋๋ค. ๋ฐ๋ฉด ์คํฌ๋ฆฝํธ์์ this๋ window ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. | | Imports and exports | O | X | script์์๋ import์ export๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค. ES6 module์์ Import๋ ๋งจ ์์์ ์คํํฉ๋๋ค.(ํธ์ด์คํ ๋ฉ๋๋ค.) | | HTML linking | | | type์ด ๋ชจ๋์์ ๋ช ์ํฉ๋๋ค. | | File downloading | ๋น๋๊ธฐ Asynchronous | ๋๊ธฐ Synchronous | ES6 module์ ๋ฌ๋ฆฌ Script๋ ๋๊ธฐ์ ์ผ๋ก ํ์ผ์ ๋ก๋ํฉ๋๋ค. https://javascript.info/script-async-defer ES6 module๋ ๋น๋๊ธฐ์ ์ผ๋ก ์์ ํฉ๋๋ค. |
ES6 module์ Importํ๋ ๊ณผ์
import๊ฐ ์คํ๋๋ ๊ณผ์ ์ ์์๋ด ๋๋ค.
์์
- index.js
import { rand } from "./math.js";
import { showDice } from "./dom.js";
const dice = rand(1, 6, 2);
showDice(dice);
Parsing
- ๋ฉ์ธ module์ด ์คํ๋๊ธฐ ์ ์ parsing ์์ ์ด ์ผ์ด๋ฉ๋๋ค.
๋๊ธฐ์ ์ผ๋ก ๋ฐ์ํ๋ ์ด์ ๋ dead ์ฝ๋ ์ญ์ & ๋ฒ๋ค๋ง์ ์ํํ ํ๊ธฐ ์ํจ์ ๋๋ค.
importํด์จ ๋ชจ๋ ๋ชจ๋์ด ๋ค์ด๋๊ณ , ์คํ๋ ๋ค์ ๋ฉ์ธ module์ด ์คํ๋ฉ๋๋ค.
์ต์๋จ์์ module์ importํ์ฌ, ์คํ ์ ์ ์์๋ณผ ์ ์์ต๋๋ค.
- ๊ด๋ จ ๋ ํผ๋ฐ์ค
- https://blog.bitsrc.io/secret-behind-javascript-performance-v8-hidden-classes-ba4d0ebfb89d
- V8 โ JIT, AST, hidden Class optimization
Download
- ๋น๋๊ธฐ๋ก ๋ค์ด๋ก๋ ํฉ๋๋ค.
- module์ import ์์ฒด๋ ๋๊ธฐ๋ก ๋ฐ์
- module์ ๋ค์ด๋ก๋๋ ๋น๋๊ธฐ๋ก ๋ฐ์
๊ฐ ๋ชจ๋์ด import => download๋๋ฉด, ๊ฐ ๋ชจ๋ ๋ํ parsing, export ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
linking imports
-
importํ module์ exports๋ฅผ ๋ฉ์ธ module์ ์ฐ๊ฒฐ link ํฉ๋๋ค.
-
link๋ ๊ฐ์ ๋ณต์ฌ๋ ๊ฐ์ด ์๋๋ผ, ์ฐ๊ฒฐ๋ ๊ฐ(์ฐธ์กฐํ๋ ๊ฐ)์ ๋๋ค.
- Live connection, NOT copies. like a pointer
- ๋ฐ๋ผ์ exports์ ๊ฐ์ด ๋ฐ๋๋ค๋ฉด importํ ๊ฐ๋ ๋ฐ๋๊ฒ ๋ฉ๋๋ค.
๐ **ES6 Module์ ํน์ง์ ๋๋ค!** JavaScript๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด์ module์์๋ ํด๋น๋์ง ์์ต๋๋ค.
-
linking ํ, importํ ๊ฐ ๋ชจ๋์ ์คํํฉ๋๋ค.
import ์์ ์ ๋ฆฌ
๐ ์์๋ฅผ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๋ฉ์ธ module์ ํ์ฑํฉ๋๋ค.
2. import๊ฐ ๋๊ธฐ๋ก ๋ฐ์ํฉ๋๋ค.
3. download๊ฐ ๋น๋๊ธฐ๋ก ๋ฐ์ํฉ๋๋ค.
4. imports์ exports๋ฅผ linkingํฉ๋๋ค.
5. ๊ฐ module์ ์คํํฉ๋๋ค.
6. ์ดํ, ๋ฉ์ธ module์ ์คํํฉ๋๋ค.