[Webpack] webpack

κ³ λ³‘ν‘œΒ·2022λ…„ 3μ›” 7일
0

Webpack

λͺ©λ‘ 보기
2/5

πŸ’‘ λ‹€μ‹œ ν•œ 번, μ›ΉνŒ©μ€ λͺ¨λ“ˆ λ²ˆλ“€λŸ¬ 이닀!

πŸ“š μš©μ–΄

λͺ¨λ“ˆ(module)


A module is one of the separate parts.

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ λͺ¨λ“ˆμ΄λž€ κΈ°λŠ₯ λ‹¨μœ„μ˜ "μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ³„ 파일"이라고 μƒκ°ν•˜λ©΄ λ©λ‹ˆλ‹€.

λ²ˆλ“€λŸ¬(bundler)


  • λ²ˆλ“€μ΄λž€ μ—¬λŸ¬ 파일, μ—¬λŸ¬ ꡬ성을 ν•©μΉ˜λŠ” 것을 λ§ν•˜λ―€λ‘œ λ²ˆλ“€λŸ¬λž€ ν•©μΉ˜κ²Œ ν•΄μ£ΌλŠ” 것을 λ§ν•©λ‹ˆλ‹€.
  • λͺ¨λ“ˆν™”λœ νŒŒμΌλ“€μ„ ν•˜λ‚˜λ‘œ λ¬Άμ–΄ κ΄€λ¦¬ν•΄μ•Όν•˜λ―€λ‘œ λ²ˆλ“€λŸ¬μ˜ 역할이 μ€‘μš”ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.
  • λͺ¨λ“ˆκ°„μ˜ μ˜μ‘΄μ„±μ„ νŒŒμ•…ν•˜μ—¬ ν•˜λ‚˜μ˜ 파일둜 λ§Œλ“€μ–΄μ€λ‹ˆλ‹€.
  • npm run build 후에 ν•˜λ‚˜μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ 파일둜 λ‚˜μ˜¨ 결과물이 λ°”λ‘œ λ²ˆλ“€λœ κ²°κ³Όμž…λ‹ˆλ‹€.
  • ex) webpack, RequireJS, Rollup, Parcel

https://webpack.js.org/

  • μ™Όμͺ½μ— μ„œλ‘œ 쒅속관계인 νŒŒμΌλ“€μ„ β†’ μ›ΉνŒ©μ„ 톡해 β†’ ν•˜λ‚˜λ‘œ κΉ”λ”ν•˜κ²Œ λͺ¨μ•„μ€λ‹ˆλ‹€.

🧐 λ„λŒ€μ²΄ 이게 뭐 λŒ€λ‹¨ν•œλ°?

πŸ€” μ™œ? μ™œ μ—¬λŸ¬ λͺ¨λ“ˆ(파일)을 μ •λ¦¬ν•˜λŠ” λ²ˆλ“€λŸ¬κ°€ ν•„μš”ν•œ κ±ΈκΉŒμš”? μš°λ¦¬λŠ” 이미 μ›ΉνŒ©μ΄ κΈ°λ³Έ λ‚΄μž₯된 create react app에 λ„ˆλ¬΄ μ΅μˆ™ν•΄μ ΈμžˆκΈ° λ•Œλ¬Έμ— μ›ΉνŒ©μ˜ μ†Œμ€‘ν•¨μ„ μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€.

History.


  • λ¦¬μ•‘νŠΈμ—μ„œ λ‹Ήμ—°ν•˜λ‹€λŠ” 듯이 μ»΄ν¬λ„ŒνŠΈ λ³„λ‘œ νŒŒμΌμ„ ν•˜λ‚˜μ”© λ§Œλ“€μ–΄μ„œ κ°œλ°œμ„ ν•©λ‹ˆλ‹€.
  • λΌλ–ΌλŠ”β˜•οΈ UI μ»΄ν¬λ„ŒνŠΈλ³„λ‘œ νŒŒμΌμ„ λ‚˜λˆ„μ§€ μ•Šκ³ , ν•„μš”ν•œ κΈ°λŠ₯을 ν•˜λ‚˜μ˜ js νŒŒμΌμ— μ „λΆ€ μž‘μ„±ν•˜κΈ°λ„ ν–ˆλŠ”λ°μš”.
  • 점점 ν”„λ‘ νŠΈμ•€λ“œ 고도 기술이 μš”κ΅¬λ˜κ³ , μ½”λ”©λŸ‰λ„ λ§Žμ•„μ§€λ©΄μ„œ μ•„λž˜μ™€ 같이 UI μ»΄ν¬λ„ŒνŠΈ λ³„λ‘œ νŒŒμΌμ„ λ‚˜λˆ„λ©΄μ„œ μœ μ§€λ³΄μˆ˜κ°€ 쒋아지기 μ‹œμž‘ν•©λ‹ˆλ‹€.

Problem.


ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€μ— ν•„μš”ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌλ“€μ΄ μ—¬λŸ¬κ°œ μžˆλ‹€λ©΄ 무슨 λ¬Έμ œκ°€ μžˆμ„κΉŒμš”?

  1. 파일 ν•˜λ‚˜ν•˜λ‚˜ HTTP 톡신을 톡해 μ„œλ²„μ— μš”μ²­μ΄ 있고! js 파일이 올 λ•ŒκΉŒμ§€ 기닀리기 λ•Œλ¬Έμ— ν™”λ©΄ λ‘œλ”©μ‹œκ°„μ΄ 였래 κ±Έλ¦½λ‹ˆλ‹€.

β†’ μ΄λ ‡κ²Œ one by one으둜 νŒŒμΌμ„ μš”μ²­ν•˜κ³  응닡받기 λ•Œλ¬Έμ— 파일 κ°œμˆ˜κ°€ λ§Žμ•„μ§ˆ 수둝 μš”μ²­μ΄ λ§Žμ•„μ§„λ‹€κ΅¬μš”!

πŸ’‘ μœ μ§€λ³΄μˆ˜ μ’‹κ²Œ ν•œλ‹€κ³  λ‹€ λͺ¨λ“ˆν™” μ‹œν‚€λ©΄ λ Œλ”λ§ νΌν¬λ¨ΌμŠ€κ°€ μ•ˆ 쒋아지기 λ•Œλ¬Έμ—, κ°œλ°œμ€ νŒŒμΌλ³„λ‘œ ν•˜λ˜ μ‹€μ œ λΈŒλΌμš°μ €μ—μ„œλŠ” ν•˜λ‚˜μ˜ 파일만 μžˆλŠ” 것이 μ’‹κ² λ„€μš”. κ·Έλž˜μ„œ μ›ΉνŒ©μ΄ λ°”λ‘œ μ—¬λŸ¬ js νŒŒμΌμ„ ν•˜λ‚˜λ‘œ λ§Œλ“€μ–΄μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€!

  1. μ—¬λŸ¬ 파일둜 λ‚˜λˆ΄λŠ”λ° μ„œλ‘œ 쒅속관계라면?

    이 κ²½μš°μ— μ—¬λŸ¬ 개둜 μͺΌκ°  파일의 λ‘œλ“œ μˆœμ„œκ°€ μ€‘μš”ν•©λ‹ˆλ‹€. μ™œλƒν•˜λ©΄, μ•„λž˜μ™€ 같이 mypage.js와 main.js 파일이 μžˆλŠ”λ° mypage.jsμ—μ„œ getUser ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— main.js νŒŒμΌμ€ 무쑰건 mypage.js 보닀 λ¨Όμ € λ‘œλ“œ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

    // mypage.js
    
    const user = getUser();
    // main.js
    
    const getUser = () => {};
    <!-- script μˆœμ„œκ°€ μ€‘μš”ν•΄! -->
    <script src="main.js" />
    <script src="mypage.js" />

μœ„μ˜ κ²½μš°λŠ” 두 개 λΏμ΄λΌμ„œ 쉽지.. μ‹€μ œ κ°œλ°œν•˜λ‹€λ³΄λ©΄ 파일이 λͺ‡ 백개 되기 λ•Œλ¬Έμ— μˆœμ„œλ₯Ό μ•Œ μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.

πŸ’‘ μ›ΉνŒ©μ΄ λͺ¨λ“ˆμ˜ 쒅속(dependecy) 관계λ₯Ό νŒŒμ•…ν•˜κ³  μ•Œμ•„μ„œ! 잘 ν•˜λ‚˜μ˜ 파일둜 λ§Œλ“€μ–΄μ€λ‹ˆλ‹€.

μ›ΉνŒ©μ΄ μ™œ ν•„μš”ν•˜κ³ , 무슨 역할을 ν•˜λŠ”μ§€ λ‹€ μ•„μ…¨μ£ ? 😘

  • μ›ΉνŒ©μ€ js 파일 뿐만 μ•„λ‹ˆλΌ, img, css, mp4 λ“± λ‹€μ–‘ν•œ λ¦¬μ†ŒμŠ€λ₯Ό λͺ¨λ‘ λͺ¨λ“ˆλ‘œ κ΄€λ¦¬ν•˜μ—¬ μ„œλ‘œμ˜ 이쑴성을 κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • 이외에도 개발 λ‹¨κ³„μ—μ„œ μ‚¬μš©ν•˜λŠ” dev server, ν•„μš”ν•  λ•Œ importν•˜λŠ” dynamic import, λͺ¨λ“ˆμ„ ν•˜λ‚˜μ˜ 파일둜 λ§Œλ“€μ§€ μ•Šκ³  μ˜μ‘΄μ„±μ„ λ”°μ Έ λ‚˜λˆ μ„œ λΉŒλ“œν•˜λŠ” code spliting 등을 μ§€μ›ν•©λ‹ˆλ‹€.

λ°”λ‘œ 이 λŠλ‚Œ.

0개의 λŒ“κΈ€