์ด์ ์ Webpack์ ๋
ํ์ผ๋ก ์ฌ์ฉํด๋ณด๋ฉฐ webpack ์ด์ JS์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ผ๋ก๋ง ์๊ณ ์์๋ค. ์ด๋ฒ์ Vanilla JS๋ก๋ง ์ปดํฌ๋ํธ ๋จ์๋ก ์น์ฑ์ ๊ตฌํํ๊ฒ ๋์๊ณ , ๋ฐ๋ก ๋ฒ๋ค๋ฌ ์์ด ES6 ๋ชจ๋(Module)์์คํ
์ผ๋ก๋ง ๊ตฌํํ๊ฒ ๋๋ฉฐ ๊นจ๋ฌ์ ๋ชจ๋์์คํ
์ ํน์ง์ ๋ค์ ํ๋ฒ ์ ๋ฆฌ ํด๋ณด๊ณ ์ ํ๋ค!
<body>
<script src="./src/bar.js"></script>
<script src="./src/foo.js"></script>
</body>
์์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ scriptํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ js ํ์ผ์ ๋๋์ด ๋ก๋ํ ์ ์์ง๋ง, ๋ถ๋ฆฌ๋ JSํ์ผ๋ค์ ํ๋์ JSํ์ผ ์ฒ๋ผ ๋์ํ๋ค.
๋ฐ๋ผ์ ๋ณต์กํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ๋ชจ๋(Module) ๋จ์ ๊ฐ๋ฐ์ด ์งํฅ๋๋ค.
script ํ๊ทธ์ type="module"
์ดํธ๋ฆฌ๋ทฐํธ๋ง ์ถ๊ฐํ๋ฉด ๋ก๋๋ JSํ์ผ์ ๋ชจ๋๋ก์จ ๋์ํ๊ฒ ๋๋ค.
<body>
<script type="module" src="./src/bar.js"></script>
<script type="module" src="./src/foo.js"></script>
</body>
script ํ๊ทธ๋ก ๋ถ๋ฆฌํ JSํ์ผ์ ์ ์ญ์ ๊ณต์ ํ๋ ๋ฐ๋ฉด, ES6์ ๋ชจ๋์ ๋ ์์ ์ธ ๋ชจ๋ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค.
// bar.js (type="module")
const x = 'bar';
console.log(x); // bar
// foo.js (type="module")
console.log(x); // ReferenceError: x is not defined
๋ชจ๋์ ๋
์์ ์ธ ์ค์ฝํ๋ฅผ ๊ฐ์ง์ง๋ง, ๋ค๋ฅธ ๋ชจ๋์์ ๋ชจ๋ ๋ด๋ถ ์๋ณ์๋ค์ ์ฌ์ฌ์ฉ ํ ์ ์๊ฒ ํ๋ ค๋ฉด export
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค!
๋ณ์, ํจ์, ํด๋์ค ๋ฑ ๋ชจ๋ ์๋ณ์๋ฅผ ๊ฐ๋ณ ๋๋ ๋ฌถ์์ผ๋ก export ํ ์ ์๋ค.
// hello.js
export function sayHello() {
console.log('Hello');
}
// index.js
import { sayHello } from './hello.js';
sayHello(); // Hello
import
ํค์๋์ ์ค๊ดํธ { }
๋ฅผ ์ฌ์ฉํ๋ค// index.js
import { sayHello as hi } from './hello.js';
hi(); // Hello
๋ชจ๋์ importํ ๋ as
ํค์๋๋ก ๋ณ์นญ์ ๋ถ์ผ ์ ์๋ค.
// index.js
import * as hello from './hello.js';
hello.sayHello(); // Hello
*
์ ์ฌ์ฉํ๋ค.// hello.js
export default function sayHello() {
console.log('Hello');
}
// index.js
import sayHello from './hello.js';
sayHello(); // Hello
default
ํค์๋๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค. default
ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฆ์์ด ํ๋์ ๊ฐ์ exportํ๋ค.// hello.js
export default const foo = () => {}; // SyntaxError
// export default () => {} ๋ก ์์ฑํด์ผํจ
index.js๋ ์ดํ๋ฆฌ์ผ์ด์
์ ์ง์
์ (entry point)์ด๋ฏ๋ก ๋ฐ๋์ script
ํ๊ทธ๋ก ๋ก๋ํด์ผํ๋ค. hello.js๋ index.js์ import
๋ฌธ์ ์ํด ๋ก๋๋๋ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
<body>
<script type="module" src="./index.js" ></script>
</body>
๋ฐ๋ธ์ฝ์ค๋ฅผ ๋ฃ๊ธฐ ์ ์ธํฐ๋ท ๊ฐ์, ์๋ฃ๋ค๋ก ๋
ํํ๋ฉฐ ๋ชจ๋๋ฌ, ํ๋ ์์ํฌ๋ค์ ๊ฐ์ฝ์ด(?)๋ก๋ง ๊ฒฝํํ๊ณ ์ ํ์ํ์ง, ์ด๋ค ์ปจ์
์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ์ธ์ง ์์ ํ ์ดํดํ์ง ๋ชปํ๊ณ ๋ฐ๋ผ๊ฐ๊ธฐ์๋ง ๊ธ๊ธํ์๋(?) ๋... ์ง์ ํ Vanilla JS์ ๋งค๋ ฅ์ ๋ชฐ๋๋ ๋...๐
์ด๋ฒ์ Vanilla JS๋ก ์ปดํฌ๋ํธ ๊ฐ๋ฐ์ ํ๋ฉฐ, ๋ค์ํ ํธ์ ๊ธฐ๋ฅ๋ค์ด ์ด๋ ํ ์๋ฏธ์์ ์ด๋ป๊ฒ ๊ตฌํ๋๊ฒ ๋์๋์ง ๊นจ๋ซ๊ณ ์๋ค. ๊ฒฝํ๊ณผ ์ง์์ด ๋ถ์กฑํ ๋งํผ ์กฐ๊ธ์ ๋๋ฆฌ๋๋ผ๋, ์ณ์ ๋ฐฉํฅ์ผ๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ์ฑ์ฅํด ๋๊ฐ๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ๋ค! ๐ธ