๐ฆ
commonjs VS esm
March 25, 2023
๐ฆ ์ก๋์ฌ๋
ํ๋์ ํค์๋๋ฅผ ์ก๊ณ ์ข ํธํ๊ฒ ์ ๋ฆฌํ๊ณ ์ถ์ด ๋ง๋ ์ก๋์ฌ๋
์ก๋์ฌ๋๋ ์กฐ์ ํ๊ธฐ ํ์
์์ ๋ณต
์ด ํธ์ฐฌํ์ก๋์ฐ์ด(้ๅๆฃ็ฐ)
์์ ์ ๋๋ ๋ง์ด๋ค.
์ก๋์ฐ์ด๋์ก๊ธฐ(้่จ)
์ ํํ๋ฅผ ๋น๋ ค์จ ์ฑ ์ผ๋ก ๊ตฌ์ฒด์ ์ธ ์ฒด๊ณ๊ฐ ์กํ์์ง ์์ ํ์์ด๋ค.
ํญ๋ชฉ์ด ๋ค์ ๋์กํ๊ณ ๋ด์ฉ์ ๊ตฌ๋ถ์ด ํผ๋๋์ด์๋ค๊ณ ํ๋ค. ๐คฃ
Module: commonjs vs esm
CommonJS(cjs)
// add.js
module.exports.add = (x, y) => x + y;
// app.js
const { sum } = require('./add');
add(11, 16);
require/module.exports
๋ฅผ ์ฌ์ฉํ๋ค.- CJS module loader๋ ๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค.
- CJS์์๋ ESM์
require
ํ ์ ์๋ค.(CJS๋Top-level Await
์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.) - CJS๋ Tree-shaking(ํ์์น ์์ ์ฝ๋์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ญ์ ํ์ฌ JS ๋ฒ๋ค์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ณ๊ฒ ๋ง๋๋ ๊ธฐ์ ) ์ ์ฉ์ด ์ด๋ ต๋ค.
- ์ด๋ ๋น๋ ํ์์ ์ ์ ๋ถ์์ ์ ์ฉํ๊ธฐ ์ด๋ ต๊ณ ๋ฐํ์์์๋ง ๋ชจ๋๊ด๊ณ๋ฅผ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ, ๋จ์ํ๊ฒ ์๊ฐํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ ์ฝ๋์ฒ๋ผ require์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.(๋์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.)
// require
let exampleName; // ๋์ ์ผ๋ก ๋ฐ๋ ์ ์๋ ๊ฐ์ด๋ผ๊ณ ๊ฐ์
const util = require(`./utills/${exampleName}`);
// module.exports
function test() {
if (exampleName === 'jayden') {
module.exports = /* ... */
}
}
test();
ECMAScript Modules(ESM)
// add.js
export function add(x, y) {
return x + y;
}
// app.js
import { add } from './add.js';
add(7, 19);
import/export
๋ฅผ ์ฌ์ฉํ๋ค.- ESM module loader๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค.(ESM module loader๋
Top-level Await
๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ด๋ค.)Top-level Await
: ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ๋ชจ๋ ๊ฐ์๋ async/await๋ฅผ ํตํ ์ ๋ฌ์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ. ๋ ์์ธํ ์ฌํญ์ ์๋ ์ฐธ๊ณ ์๋ฃ ๋ณด๊ธฐ!
- ESM์์ CJS๋ฅผ
import
ํ ์ ์๋ค. - ESM์ ๋์ ์ผ๋ก ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, ํ์ผ ์ต์์ ์ค์ฝํ์์๋ง import, export๊ฐ ๊ฐ๋ฅํ๋ค.(์ ์ ์ธ ๊ตฌ์กฐ์ ๋ชจ๋ ์์กด์ ๊ฐ์ ํ๋ค.)
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ํ์ ํ๊ธฐ ์ฌ์ฐ๋ฏ๋ก Tree-shaking์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
import util from `./utils/${exampleName}.js`; // ๋ถ๊ฐ๋ฅ
import { add } from "./utils/jayden.js"; // ๊ฐ๋ฅ
function foo() {
export const value = "foo"; // ๋ถ๊ฐ๋ฅ
}
export const value = "foo"; // ๊ฐ๋ฅ
๋์ผ๋ก
- ์ผ๋จ์ ๋์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ(?)์ ์์ด์์ ์ฐจ์ด๋ง ์ ๋ฆฌํด๋ณด์๋ค.
- ๊ทผ๋ณธ์ ์ผ๋ก ์ด ๋์ ์๋์๋ฆฌ๋ ๋ค๋ฅด๋ฉฐ, ์ค์ ๋ก ํ์ ์์๋ ์ด ๋์ ํผ์ฉํด์ ์ฌ์ฉํ ํ์๊ฐ ์๊ธฐ์ ๋ชจ๋ ๋์ํ๋ ค๊ณ ๋ ํ๋ ๊ฒ ๊ฐ๋ค.(์๋ Toss ์ํฐํด ์ฐธ๊ณ )