λͺ¨λ JS Deep dive #48 | λͺ¨λ
2022λ 09μ 30μΌ 13:00
π λͺ¨λ
λͺ¨λμ μ ν리μΌμ΄μ μ ꡬμ±νλ κ°λ³μ μμλ‘μ μ¬μ¬μ© κ°λ₯ν μ½λ μ‘°κ°μ λ§νλ€. λͺ¨λμ΄ μ±λ¦½νλ €λ©΄ λͺ¨λμ μμ λ§μ νμΌ μ€μ½νλ₯Ό κ°μ§ μ μμ΄μΌ νλ€.
μ¦, λͺ¨λμ κ°λ³μ μ‘΄μ¬λ‘μ μ ν리μΌμ΄μ κ³Ό λΆλ¦¬λμ΄ μ‘΄μ¬νλ©°, 곡κ°κ° νμν μμ°μ νμ νμ¬ λͺ μμ μΌλ‘ μ νμ 곡κ°κ° κ°λ₯νλ€. μ΄λ₯Ό exportλΌ νλ€.
exportλ λͺ¨λμ μμ°μ λ€λ₯Έ λͺ¨λμμ μ¬μ¬μ©ν μ μκ³ , λͺ¨λ μ¬μ©μλ λͺ¨λμ΄ exportν μμ° μ€ μΌλΆ λλ μ 체λ₯Ό μ νν΄ μμ μ μ€μ½ν λ΄λ‘ λΆλ¬λ€μ¬ μ¬μ¬μ©ν μ μλ€. μ΄λ₯Ό importλΌ νλ€.
π JSμ λͺ¨λ
JSλ νμμ μΌλ‘ λͺ¨λ μμ€ν μ μ§μνμ§ μμλ€. λ€μ λ§ν΄, νμΌ μ€μ½ν, import, exportλ₯Ό μ§μνμ§ μμλ€. script νκ·Έλ‘ λ‘λν΄λ λΆλ¦¬λ μλ°μ€ν¬λ¦½νΈ νμΌλ€μ κ²°κ΅ νλμ νμΌ λ΄μ μλ κ²μ²λΌ λμνλ€. μ΄λ° μν©μμ μ μλ κ²μ΄ CommonJSμ AMDκ³ , JS λ°νμ νκ²½μΈ Node JSλ λͺ¨λ μμ€ν μ μ¬μ€μ νμ€μΈ CommonJSλ₯Ό μ±ννλ€.
π ES6λͺ¨λ(ESM)
μ΄λ¬ν μν©μμ ES6μμ ν΄λΌμ΄μΈνΈ μ¬μ΄λ JSμμλ λμνλ λͺ¨λ κΈ°λ₯μ μΆκ°νλ€. ESMμ μ¬μ©λ²μ script νκ·Έμ type="module" μ΄νΈλ¦¬λ·°νΈλ₯Ό μΆκ°νλ©΄ λ‘λλ μλ°μ€ν¬λ¦½νΈ νμΌμ λͺ¨λλ‘μ λμνλ€. ESMμμ λͺ
ννκ² νκΈ° μν΄ mjsλ₯Ό μ¬μ©ν κ²μ κΆμ₯νλ€.
π import/export & require/exports
require / exports λ NodeJSμμ μ¬μ©λκ³ μλ CommonJS ν€μλμ΄κ³ Ruby μΈμ΄ μ€νμΌκ³Ό λΉμ·νλ€κ³ λ³Ό μ μλ€.
import / export λ ESM λ°©μμΌλ‘ Javaλ Python μΈμ΄ λ°©μκ³Ό λΉμ·νλ€.
/* CommonJS */
const name = require("./module.js");
/* ES6 */
import name from "./module.js";μ μ²λΌ import μ require λ νμ°ν λ€λ₯΄κΈ° λλ¬Έμ λμ ꡬλΆνλλ° μμ΄ λ¬΄λ¦¬κ° μλ€.
νμ§λ§, export μ exports λ λ¨μλ 볡μλμ μ°¨μ΄ λλ¬Έμ λ§μ μ΄λ³΄ κ°λ°μλ€μ΄ νΌλν΄ νλ€.
/* CommonJS */
const name = "κ³ μμ΄";
module.exports = name;
/* ES6 */
const name = "κ³ μμ΄";
export default name;CommonJSμ ES6λΌλ λͺ¨λ μμ€ν μμλ exports κ°μ²΄λΌλ κ°λ μ΄ μ‘΄μ¬νλλ°, exportsλ λͺ¨λλ‘λΆν° λ΄λ³΄λ΄μ§λ λ°μ΄ν°λ€μ λ΄κ³ μλ νλμ κ°μ²΄μ΄λ€.
ES6μ export default ꡬ문μ΄, CommonJSμ module.exports ꡬ문 λμμ λ체νκΈ° μν λ¬Έλ²μ΄κ³ , exportꡬ문μ exports.λ³μ λ₯Ό λ체νκΈ° μν λ¬Έλ²μ΄λΌ 보면 λλ€.
[Node.js μμ import ν€μλ μ¬μ© λ°©λ²]
λΉλ‘ μ μμ μΌλ‘ λ Έλμ CommonJSλ₯Ό λ체ν μλ μμ§λ§, μλ°μ€ν¬λ¦½νΈ λ Έλ νλ‘μ νΈμμ import ν€μλλ₯Ό μ¬μ©νλλ‘ μ§μ μ€μ μ ν μ μλ λ°©λ² λν μ‘΄μ¬νλ€.
κ³Όκ±°μλ import, exportλ₯Ό μΈμμν€κΈ° μν΄ λ°λ‘ .mjsλΌλ νμ₯μλ₯Ό μ¬μ©ν΄ λͺ¨λ ν€μλλ₯Ό ꡬλΆνλ λ°©λ²μ μ¬μ©νμλ€.
μλ₯Όλ€μ΄ app.js λμ μ app.mjs λ‘ μμ€ νμΌμ λ§λλ μμΌλ‘ λ§μ΄λ€.
νμ§λ§ μ΄μ λ package.jsonμ ν΅ν΄μ κ°νΈνκ² μ€μ ν μ μμ΄μ νμ₯μλ₯Ό λ°κΎΈμ§ μμλ import, exportλ₯Ό μΈ μ μκ² λμλ€.
π μ°Έκ³ μλ£
[NODE] π require vs import λ¬Έλ² λΉκ΅ (CommonJS vs ES6)