๋ชจ๋์ด๋ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค์ ๊ดํ ์ฝ๋๊ฐ ๋ชจ์ฌ์๋ ํ๋์ ํ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์ํด ์ฌ์ฉํ๋ค.
๊ธฐ๋ฅ๋ค์ด ๋ชจ๋ํ๊ฐ ์ ๋์ด ์๋ค๋ฉด, ์์กด์ฑ์ ๊ทธ๋งํผ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ธฐ๋ฅ์ ๊ฐ์ ํ๋ค๊ฑฐ๋ ์์ ํ ๋ ํจ์ฌ ํธํ๊ฒ ํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ์ญ๋ณ์๋ ์ ์ญ๊ณต๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ์์ด ๋ง์์ง์๋ก ๊ฒน์น๋ ๋ค์์คํ์ด์ค๊ฐ ๋ง์์ง ์ ์๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ฉด ๋ชจ๋๋ง์ ๋ค์์คํ์ด์ค๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋๊ฐ์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํ์ง ์๊ณ ๋ชจ๋๋ก ๋ถ๋ฆฌ์์ผ์ ํ์ํ ๋๋ง๋ค ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฐ ์ฅ์ ๋ค์ ์ด๋ฆฌ๊ธฐ ์ํด ๋ชจ๋ ๊ฐ๋ ์ด ํ์ํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋์ผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฌ๋ฌ ์๋๋ค์ด ์์๋ค. ๊ทธ ์ค CommonJS, AMD, UMD ๋ฐ ES6์ import&export๊ฐ ๋ํ์ ์ธ ์๋๋ค์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ณต์ ์คํ์ด ๋ธ๋ผ์ฐ์ ๋ง ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์๋ฒ์ฌ์ด๋ ๋ฐ ๋ฐ์คํฌํ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ง์ํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ด ์์๋ค. ๊ทธ๊ฑธ ์ํด ๋ง๋ ๊ทธ๋ฃน์ด CommonJS์ด๋ฉฐ ์ฌ๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฒ์ฉ์ ์ธ ์ธ์ด๋ก ์ฐ์ด๊ธฐ ์ํ ์คํ์ ์ ์ํ๊ณ ์๋ค.
๋ค๋ฅธ ๋ชจ๋์ ์ฌ์ฉํ ๋๋ require๋ฅผ, ๋ชจ๋์ ํด๋น ์ค์ฝํ ๋ฐ์ผ๋ก ๋ด๋ณด๋ผ ๋์๋ module.exports๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก, Node.js์์ ํ์ฌ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๋ค.
CommonJS ๊ทธ๋ฃน์์ ์๊ฒฌ์ด ๋ง์ง ์์ ๋์จ ์ฌ๋๋ค์ด ๋ง๋ ๊ทธ๋ฃน์ผ๋ก, ๋น๋๊ธฐ ๋ชจ๋์ ๋ํ ํ์ค์์ ๋ค๋ฃจ๋ ๊ทธ๋ฃน์ด๋ค. CommonJS๊ฐ ์๋ฒ์ชฝ์์ ์ฅ์ ์ด ๋ง์ ๋ฐ๋ฉด, AMD๋ ๋ธ๋ผ์ฐ์ ์ชฝ์์ ๋ ํฐ ํจ๊ณผ๋ฅผ ๋ฐํํ๋ค. ๋ธ๋ผ์ฐ์ ์์๋ ๋ชจ๋ ๋ชจ๋์ด ๋ค ๋ก๋ฉ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ๋ชจ๋ ๋ก๋ฉ ๋ฐฉ์์ผ๋ก ๊ตฌํํด๋์๋ค.
์ด ๋ฐฉ์์์ ์ฌ์ฉํ๋ ํจ์๋ define()๊ณผ require()์ด๋ฉฐ AMD ์คํ์ ๊ฐ์ฅ ์ ๊ตฌํํ ๋ชจ๋๋ก๋๋ RequireJS ์ด๋ค.
๋ชจ๋ ๊ตฌํ ๋ฐฉ์์ด CommonJS์ AMD๋ก ๋๋๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฑธ ํตํฉํ๊ธฐ ์ํ ํ๋์ ํจํด์ด๋ผ๊ณ ํ ์ ์๋ค.
ํตํฉํ๋ ๋ฐฉ์์ 2๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌ๋ฐ๋ ํจ์๋ฅผ ์คํํ๋ ๊ฒ์ผ๋ก, ์ฒซ๋ฒ์งธ ์ธ์๋ Browser ์ชฝ์ ๊ตฌํํ root์ ๋๊ธธ ๊ฐ์ผ๋ก undefined์ด๋ฉด this๋ก, ์๋๋ผ๋ฉด window๋ก ์ค์ ํ๋ค. ๋๋ฒ์งธ ์ธ์๋ก๋ ๋น ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๋ณด๋ธ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๊ฐ๊ฐ์ ํ๊ฒฝ์์ ๋ชจ๋ ๋ชจ๋ ๊ฐ๋ ์ ์ฌ์ฉํ ์ ์๋ค.
import์ export ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ Babel์ ํ๋ฌ๊ทธ์ธ์ ํตํด ๋ณํ์์ผ ์ฌ์ฉํ๋ค.
export๋ฅผ ์ฌ์ฉํ ๋๋ named export์ default export๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋จ, default export๋ ๋ชจ๋ ๋ด์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์๊ณ named export๋ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ ์ ์๋ค.
default export๋ก ๋ด๋ณด๋ด๋ฉด import์์ ๋ด๋ณด๋ธ ์ด๋ฆ ๊ทธ๋๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ง๋ง, named export๋ก ๋ด๋ณด๋ด๋ฉด {}๋ก ๋ฌถ์ด์ ๋ถ๋ฌ์์ผ ํ๋ค.
๋ณ์นญ(alias)๋ฅผ as๋ก ์ฃผ์ด์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์๋ ์๊ณ , * ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํด ํ ๋ฒ์ ๋ถ๋ฌ์ค๊ฑฐ๋ ๋ด๋ณด๋ผ ์๋ ์๋ค. ์ด๋ฐ ์ฌ๋ฌ๊ฐ์ง ๋ณํ๊ธฐ๋ฒ์ ์ฌ์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์.
- default export
// moduleA.js
const A = () => {};
export default A;
// index.js
import A from 'moduleA';- named export
// moduleB.js
export const B = () => {};
// index.js
import { B } from 'moduleB';