<aside> ๐Ÿ’ก

์ฒ˜์Œ JavaScript๋Š” ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ์—†์–ด, ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์ด ๋“ค์–ด๊ฐ€์•ผํ–ˆ๋‹ค. CJS, AMD, UMD, ESM์ด ๋“ฑ์žฅํ•œ ์ดํ›„์—๋Š” ๋ชจ๋“ˆ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

</aside>

1. CJS (CommonJS)


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํฐ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š”ย ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“ˆํ™” ๋ช…์„ธ๋ฅผ ๋งŒ๋“  ๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ฃน ์ค‘ 'CommonJS'๊ฐ€ ์žˆ๊ณ , ์ด CommonJS์˜ ๋ช…์„ธ๊ฐ€ ํ˜„์žฌ node์˜ ํ‘œ์ค€์ด ๋˜์–ด์žˆ๋‹ค.

node ํ‘œ์ค€(CommonJS์˜ ๋ช…์„ธ)์ดย require์™€ย module.exportsย ์ด๋‹ค.

ex)

// ์•„๋ž˜์™€ ๊ฐ™์ด require์„ ํ†ตํ•ด package/lib ๋ชจ๋“ˆ์„ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
const lib = require('package/lib');

// ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
function foo () {
  lib.log('hello world!');
}

// foo ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋กœ ์ถ”์ถœ๋  ์ˆ˜ ์žˆ๋‹ค.
exports.foobar = foo;
// ๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.
// ๋™๊ธฐ์ ์ธ ํŠน์ง•์„ ๊ฐ€์ง€๋ฏ€๋กœ ์„œ๋ฒ„์‚ฌ์ด๋“œ์— ์‚ฌ์šฉํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค. 
// Node.js๊ฐ€ CommonJS๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
// (server ๊ตฌ์ถ•ํ•œ ํŒŒ์ผ๋“ค์„ ๋ณด๋ฉด require๋กœ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ๋‹ค.)

const foo = require('foo');
const bar = require('bar');

foo.log('It is foo');
bar.log('It is bar');

๊ทธ๋Ÿฐ๋ฐย ES6๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž์ฒด์—์„œ ES6 Module์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ชจ๋“ˆํ™”๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์ด๊ฒƒ์ด ๋ฐ”๋กœย importย ์™€ย export์ด๋‹ค.

2. ESM (ECMAScript Module)


ES6์— JavaScript ๋ชจ๋“ˆ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

import lib from 'package/lib';

function foo () {
  lib.log('hello world!');
}

export {
  foobar: foo
};

export , export default ์ฐจ์ด์ 

3. JavaScript ์ž์ฒด ๋ชจ๋“ˆ ์‹œ์Šคํ…œ