λͺ¨λ
λͺ¨λμ μΌλ°μ μλ―Έ
- λͺ¨λ(
module
)μ΄λ μ ν리μΌμ΄μ
μ ꡬμ±νλ κ°λ³μ μμλ‘μ μ¬μ¬μ© κ°λ₯ν μ½λ μ‘°κ°μ λ§νλ€.
- μΌλ°μ μΌλ‘ λͺ¨λμ κΈ°λ₯μ κΈ°μ€μΌλ‘ νμΌ λ¨μλ‘ λΆλ¦¬
- μ΄λ λͺ¨λμ΄ μ±λ½νλ €λ©΄ λͺ¨λ μμ λ§μ νμΌ μ€μ½ν(λͺ¨λ μ€μ½ν)λ₯Ό κ°μ§ μ μμ΄μΌ ν¨
- μμ λ§μ νμΌ μ€μ½νλ₯Ό κ°λ λͺ¨λμ κΈ°λ³Έμ μΌλ‘ λΉκ³΅κ° μν
- μ¦, λͺ¨λλ΄λΆμ λ³μ, ν¨μ κ°μ²΄ λ± λͺ¨λ μΊ‘μν λμ΄ λ€λ₯Έ λͺ¨λμμ μ κ·Όν μ μλ€.
- κ·Έλ¬λ λͺ¨λμ μ ν리μΌμ΄μ
μ΄λ λ€λ₯Έ λͺ¨λμ μν΄ μ¬μ¬μ© λμ΄μΌ μλ―Έκ° μμ, λ°λΌμ 곡κ°κ° νμν μμ°μ νμ νμ¬ λͺ
μμ μΌλ‘ μ νμ 곡κ°κ° κ°λ₯ νλ€. μ΄λ₯Ό exportλΌκ³ νλ€.
export
λ λͺ¨λμ λ€λ₯Έ λͺ¨λμμ μ¬μ¬μ© κ°λ₯νκ³ , μ΄λ 곡κ°λ λͺ¨λμ μ¬μ©νλ λͺ¨λμ λͺ¨λ μ¬μ©μ(module consumer
)λΌκ³ νλ€.
- λͺ¨λ μ¬μ©μλ exportν λͺ¨λμ μΌλΆ λλ μ 체λ₯Ό μμ μ μ€μ½ν λ΄λ‘ λΆλ¬λ€μ¬ μ¬μ¬μ© ν μ μλλ° μ΄λ₯Ό import λΌκ³ νλ€.
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ
- μλ°μ€ν¬λ¦½νΈλ μΉνμ΄μ§μ λ¨μν 보쑰 κΈ°λ₯μ μ²λ¦¬νκΈ° μν λͺ©μ μΌλ‘ νμ
- μ¦, μλ°μ€ν¬λ¦½νΈλ λͺ¨λμ΄ μ±λ¦½νκΈ° μν΄ νμν νμΌ μ€μ½νμ
import
, export
λ₯Ό μ§μνμ§ μμλ€.CμΈμ΄λ #include, μλ°λ import λ± λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄λ λͺ¨λκΈ°λ₯μ μ§μ
- μλ°μ€ν¬λ¦½νΈλ μ¬λ¬κ°μ νμΌλ‘ λΆλ¦¬νμ¬ λΈλΌμ°μ μμ λ‘λν΄λ λ
립μ μΈ νμΌ μ€μ½ν κ°μ§μ§ μγ
κ³ νλμ μλ°μ€ν¬λ¦½νΈ νμΌ λ΄μ μλ κ² μ²λΌ λμμ μ λ³μκ° μ€λ³΅λλ λ±μ λ¬Έμκ° λ°μν μ μλ€.
- μλ°μ€ν¬λ¦½νΈκ° λΈλΌμ°μ νκ²½μμ κ΅νλμ§ μκ³ λ²μ©μ μΌλ‘ μ¬μ©λλ©΄μ λͺ¨λ μμ€ν
μ΄ μ μ λ¨
- μλ°μ€ν¬λ¦½νΈμ λͺ¨λ μμ€ν
μ ν¬κ² CommonJS λλ AMD μ§μμΌλ‘ λλ©λλ€.NodeJSλ CommonJSλ₯Ό μ±ννκ³ ECMAScript νμ€ μ¬μμ μλμ§λ§ CommonJS μ¬μμ λ°λ₯Έ λͺ¨λ μμ€ν
μ μ§μν©λλ€.
μ¦, NodeJS νκ²½μμλ νμΌλ³λ‘ λ
립μ μΈ νμΌ μ€μ½ν(λͺ¨λ μ€μ½ν)λ₯Ό κ°μ΅λλ€.
ES6 λͺ¨λ(ESM)
ES6
μμλ ν΄λΌμ΄μΈνΈ μ¬μ΄λ μλ°μ€ν¬λ¦½νΈμμλ λμνλ λͺ¨λ κΈ°λ₯μ μΆκ°ν¨.
script
νκ·Έμ type="module"
μ΄νΈλ¦¬λ·°νΈλ₯Ό μΆκ°νλ©΄ λ‘λλ μλ°μ€ν¬λ¦½νΈ νμΌμ λͺ¨λλ‘ λμ
<script type="module" src="app.js" ></script>
λͺ¨λ μ€μ½ν
ESM
μ΄ μλ μλ°μ€ν¬λ¦½νΈ νμΌμ script νκ·Έλ‘ λΆλ¦¬ν΄λ λ
μμ μΈ λͺ¨λ μ€μ½νλ₯Ό κ°μ§ μλλ€.
ESM
λ΄μμ var ν€μλλ‘ μ μΈν λ³μλ μ μ λ³μκ° μλλ©° window κ°μ²΄μ νλ‘νΌν°λ μλλ€.
- λͺ¨λ λ΄μμ μ μΈν μλ³μλ μΈλΆμμ μ°Έμ‘° λΆκ°λ₯ (λͺ¨λ μ€μ½νκ° λ€λ₯΄κΈ° λλ¬Έ)
export ν€μλ
- λͺ¨λ λ΄λΆμμ μ μΈν μλ³μλ₯Ό μΈλΆμ 곡κ°νμ¬ λ€λ₯Έ λͺ¨λλ€μ΄ μ¬μ¬μ©ν μ μκ² νλ €λ©΄
export
ν€μλλ₯Ό μ¬μ©νλ€.
export
ν€μλλ μ μΈλ¬Έ μμ μ¬μ©νλ€. (λ³μ, ν¨μ ν΄λμ€ λ± λͺ¨λ μλ³μλ₯Ό export κ°λ₯)
export const pi = Math.PI;
export function square(x) {
return x * x;
}
export class Person {
constructor(name) {
this.name = name;
}
}
- μ λ³μ, ν¨μ, ν΄λμ€λ₯Ό κ°μ²΄λ‘ λ§λ€μ΄ νλ²μ export ν μλ μλ€.
export {pi, square, Person};
import ν€μλ
- λ€λ₯Έ λͺ¨λμμ export ν μλ³μλ₯Ό μμ μ λͺ¨λ μ€μ½νλ‘ λ‘λ νλ €λ©΄
import
ν€μλλ₯Ό μ¬μ©
import { pi, square, Person} from './lib.mjs';
console.log(pi); // 3.141592653589793
console.log(square(10)); // 100
console.log(new Person("Lee")); // Person { name: 'Lee' }
- import μ export λ μλ³μ μ΄λ¦κ³Ό κ°κ² import ν΄μΌν¨
- μλ³μ μ΄λ¦μ νλ²μ import ν μλ μλ€.
as
μ¬μ©νμ¬ μ΄λ¦μ μ§μ νλ λ°©λ²
// lib μ΄λΌλ μ΄λ¦μΌλ‘ λͺ¨λ μλ³μλ₯Ό λΆλ¬μ΄
import * as lib from "./lib.mjs";
console.log(lib.pi); // 3.141592653589793
console.log(lib.square(10)); // 100
console.log(new lib.Person("Lee")); // Person { name: 'Lee' }
- μλ³μ μ΄λ¦μ μ§μ μ§μ
import { pi as PI, square as sq, Person as P } from "./lib.mjs";
console.log(PI); // 3.141592653589793
console.log(sq(2)); // 4
console.log(new P("Kim")); // Person { name: 'Kim' }
- λͺ¨λμμ νλμ κ°λ§ export νλ€λ©΄ default ν€μλ μ¬μ©κ°λ₯
- default ν€μλλ‘ exportν λͺ¨λλ¦
{}
μμ΄ μμμ μ΄λ¦μΌλ‘ import
const pi = Math.PI;
function square(x) {
return x * x;
}
class Person {
constructor(name) {
this.name = name;
}
}
// default ν€μλλ₯Ό μ¬μ©νλ κ²½μ° var, let, const ν€μλ μ¬μ© λΆκ°.
export default {pi. square, Person};
/*----------------------------------*/
import defaultModule from 'lib.mjs';
console.log(defaultModule.pi); // 3.141592653589793
λκΈ