<aside> π‘
μ²μ JavaScriptλ λͺ¨λμ κ°μ Έμ€κ±°λ λ΄λ³΄λ΄λ λ°©λ²μ΄ μμ΄, νλμ νμΌμ λͺ¨λ κΈ°λ₯λ€μ΄ λ€μ΄κ°μΌ νλ€. CJS, AMD, UMD, ESMμ΄ λ±μ₯ν μ΄νμλ λͺ¨λλ‘ κ°λ°νκ³ λ°°ν¬ν μ μκ² λμλ€.
</aside>
μλ°μ€ν¬λ¦½νΈλ₯Ό μλ²μμ μ¬μ©ν μ μλ ν° μ΄μ μ€ νλλ λͺ¨λνκ° κ°λ₯νκΈ° λλ¬Έμ΄λ€. μλ°μ€ν¬λ¦½νΈμ λͺ¨λν λͺ μΈλ₯Ό λ§λ λνμ μΈ κ·Έλ£Ή μ€ 'CommonJS'κ° μκ³ , μ΄ CommonJSμ λͺ μΈκ° νμ¬ Node.jsμ νμ€μ΄ λμ΄μλ€.
Node.js νμ€(CommonJSμ λͺ
μΈ)μ΄ requireμ module.exportsμ΄λ€.
// requireμ ν΅ν΄ package/lib λͺ¨λμ λ³μμ λ΄μ μ μλ€.
const lib = require('package/lib');
function foo() {
lib.log('hello world!');
}
// foo ν¨μλ₯Ό λ€λ₯Έ νμΌμμ μ¬μ©ν μ μλλ‘ λͺ¨λλ‘ μΆμΆνλ€.
exports.foobar = foo;
CJSμ κ°μ₯ ν° νΉμ§μ λκΈ°μ μΌλ‘ λμνλ€λ μ μ΄λ€. require νΈμΆμ΄ μλ£λ λκΉμ§ λ€μ μ½λλ‘ λμ΄κ°μ§ μλλ€. μλ² νκ²½μμλ νμΌ μμ€ν
μμ λͺ¨λμ μ½μ΄μ€λ I/Oκ° λΉ λ₯΄κΈ° λλ¬Έμ μ΄ λ°©μμ΄ μ€μ©μ μ΄μ§λ§, λΈλΌμ°μ νκ²½μμλ λ€νΈμν¬λ₯Ό ν΅ν΄ νμΌμ κ°μ ΈμμΌ νλ―λ‘ λκΈ° λ°©μμ΄ λΈλ‘νΉμ μΌμΌμΌ μ ν©νμ§ μλ€.
// λκΈ°μ μΌλ‘ μμλλ‘ μ€νλλ€.
const foo = require('foo');
const bar = require('bar');
foo.log('It is foo');
bar.log('It is bar');
κ·Έλ°λ° ES6λ‘ λμ΄μ€λ©΄μ μλ°μ€ν¬λ¦½νΈ μ체μμ ES6 Moduleμ΄λΌλ μ΄λ¦μΌλ‘ λͺ¨λνλ₯Ό μ§μνκΈ° μμνκ³ , μ΄κ²μ΄ λ°λ‘ importμ exportμ΄λ€.
ES6(ES2015)μ μλ°μ€ν¬λ¦½νΈ 곡μ λͺ¨λ κΈ°λ₯μ΄ μΆκ°λμλ€. ESMμ ECMAScript νμ€μ ν¬ν¨λ λͺ¨λ μμ€ν μΌλ‘, λΈλΌμ°μ μ Node.js λͺ¨λμμ 곡μμ μΌλ‘ μ§μνλ€.
import lib from 'package/lib';
function foo() {
lib.log('hello world!');
}
export { foo as foobar };
exportμ export defaultλ λͺ¨λμμ κ°μ λ΄λ³΄λ΄λ λ κ°μ§ λ°©μμ΄λ€.
named export (export) λ νλμ νμΌμμ μ¬λ¬ κ°μ λ΄λ³΄λΌ μ μμΌλ©°, κ°μ Έμ¬ λλ λ°λμ {}λ‘ κ°μΈκ³ λ΄λ³΄λΈ μ΄λ¦κ³Ό λμΌνκ² μ¨μΌ νλ€. as ν€μλλ‘ aliasλ₯Ό μ€ μ μλ€.
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
// main.js
import { add, subtract } from './math.js';
import { add as plus } from './math.js'; // alias μ¬μ©
default export (export default) λ νμΌλΉ νλλ§ μ¬μ©ν μ μμΌλ©°, κ°μ Έμ¬ λ {}κ° νμ μκ³ μμμ μ΄λ¦μΌλ‘ λ°μ μ μλ€.
// calculator.js
export default function calculate(a, b) {
return a + b;
}
// main.js
import calc from './calculator.js'; // μ΄λ¦ μμ λ‘κ² μ§μ κ°λ₯
import myCalc from './calculator.js'; // μ΄κ²λ λμΌνκ² λμ