February 23, 2019 β’ βοΈ 3 min read
μ΄λ² ν¬μ€νΈλ NPM(Node Package Manager)μ΄ λ€λ₯Έ μΈμ΄μ ν¨ν€μ§ 맀λμ μλ λ€λ₯Έ νΉμ§μΈ Nested Dependenciesμ λν΄ λ€λ£¨λ κΈμ λ²μν κΈμ λλ€. μλ¬Έ: Nested Dependenciesμ λλ€. (첫λ²μκΈμ΄λΌ μ€μμ΄ μμ μ μμ΅λλ€.)
μ€λλ λ§μ ν¨ν€μ§ 맀λμ λ€μ΄ μμ§λ§, κΈ°λ³Έμ μΌλ‘ μ€μ²©λ μ’ μμ±(Nested Dependencies)μΌλ‘ μλνλλ‘ μ€κ³λ ν¨ν€μ§ 맀λμ λ npm λ°μ μλ€. (μ μ΄λ λ΄κ° μκΈ°μλ)
μ λ€μ΄μ΄κ·Έλ¨μμ deps
컨ν
μ΄λλ€μ μ’
μμ±μ 격리λ μ§ν©μ λνλΈλ€. λλΆλΆμ ν¨ν€μ§ 맀λμ λ€μ λͺ¨λ μ’
μμ±μ λν΄μ νλμ βλ€μμ€νμ΄μ€βλ₯Ό κ°λλ€. λλ μ΄ μνλ₯Ό βflat(ννν)β μ΄λΌκ³ λΆλ₯Έλ€. μλνλ©΄ μ’
μμ±μ ν λ μ€μ§ ν λ¨κ³μ κ²μ μ©μ΄μ±μ κ°μ§λ€λ κ²μ μλ―ΈνκΈ° λλ¬Έμ΄λ€. κ·Έκ²μ μ± μ 체μμ βfooβ λΌλ μ΄λ¦μ κ°μ§ μ’
μμ±μ΄ νλλ§ μλ€λ κ²μ μλ―Ένλ€.
ννν μ’ μμ± μμ€ν μμ μ’ μμ±μ νΈλ μμ μ΄ μ΄λ»κ² μΌμ΄λλμ§μ λν΄ μμ보기 μν΄ μμ λ₯Ό μ΄ν΄λ³΄λλ‘ νμ.
μ΄ μμ μλ μΈ κ°μ μ’
μμ±μ΄ μλ€. κ²μ μ μ λ€μ βμμ‘΄β κ΄κ³λ₯Ό μλ―Ένλ€. μ¦, μ°λ¦¬ μ±μ a
, b
, κ·Έλ¦¬κ³ c
λ₯Ό μμ‘΄νκ³ μκ³ , c
λ a
λ₯Ό μμ‘΄νκ³ μλ€. μ°λ¦¬ μ±κ³Ό c
λ λͺ¨λ a
λ₯Ό μμ‘΄νκ³ μλ€.
μ’
μμ±μ΄ νννκΈ° λλ¬Έμ (μ°λ¦¬ μ± μ 체μ μ€μ§ νλμ 볡μ¬λ³Έλ§ κ°μ§κ³ μλ€λ κ²μ μλ―Έν¨) μ°λ¦¬ μ±κ³Ό c
κ° λͺ¨λ a
μ νΈνλλ λ²μ μ μμ‘΄νλλ‘ ν΄μΌνλ€λ κ²μ μλ―Ένλ€. λ§μ½ μ°λ¦¬κ° c
λ₯Ό μλ‘μ΄ λ²μ μΌλ‘ μ
κ·Έλ μ΄λνκ³ μΆλ€λ©΄, κ·Έλ¬λ μ λ²μ μ΄ μ°λ¦¬ μ±κ³Ό μμ‘΄νκ³ μλ a
μ νΈνλμ§ μλ λ²μ μ a
λ‘ μ
κ·Έλ μ΄λνλ€λ©΄, μ’
μμ± μΆ©λμ΄ λ°μνλ€. μ΄ νμμ βDLL μ§μ₯β (Windows) λλ λ μΌλ°μ μΌλ‘ βμ’
μμ± μ§μ₯β μ΄λΌκ³ νλ€.
μ΄λ²μλ μ€μ²©λ μ’ μμ± μμ€ν μ κ°μ μμ λ₯Ό μ΄ν΄λ³΄μ.
μ¬κΈ°μλ ν λ¨κ³μ μ’
μμ±μ΄ μλλΌ μ¬λ¬ λ¨κ³μ μ’
μμ±μ κ°μ§κ³ μλ€. a
μ b
κ° μ’
μμ±μ κ°μ§κ³ μμ§ μλ€κ³ κ°μ νμ. μ°λ¦¬ μ±κ³Ό c
λ λͺ¨λ μ¬μ ν a
μ μμ‘΄νκ³ μλ€.
μ€μ²©λ μ’
μμ±μμλ a
μ λ 볡μ¬λ³Έμ κ°μ§κ³ μλ€. μ°λ¦¬ μ±μ΄ a
μ λ²μ 1μ΄ νμνκ³ c
κ° a
μ λ²μ 2κ° νμνλ€λ©΄ a
μ λ λ²μ μ λͺ¨λ μ€μΉνλ€. c
μ μ’
μμ±λ€μ΄ c
μκ²λ§ μ΄μ© κ°λ₯νκ³ , μ΄λ€ κ²λ κ·Έκ²λ€μ μ κ·Όν μ μλ€. μΆκ°μ μΌλ‘, μ°λ¦¬ μ±κ³Ό c
κ° λͺ¨λ a
μ νΈνλλ λ²μ μ μμ‘΄νλ€λ κ²μ΄ λλ¬λλ€λ©΄, c's deps
ν΄λλ₯Ό μμ±ν νμκ° μλ€. μ΄ κ²½μ°μλ ννν μ’
μμ±μ²λΌ λ³΄μΌ κ²μ΄λ€. (μ΄κ²μ΄ npm dedupe
κ° λμνλ λ°©λ²μ΄λ€.)
Personal blog by Jon Jee.
I hope to explain with words and code.