λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μ½”λ”©

✍λͺ¨λ“ˆ λ²ˆλ“€λŸ¬ / Webpack

μƒν™œμ½”λ”© webpack κ°•μ˜λ₯Ό μ°Έκ³ ν•˜μ—¬ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

🌈 λͺ¨λ“ˆ λ²ˆλ“€λŸ¬(module Bundler)

 

λͺ¨λ“ˆ(module)μ΄λž€, ν”„λ‘œκ·Έλž˜λ°μ΄λΌλŠ” κ΄€μ μ—μ„œ 기본적으둜 '본체에 λŒ€ν•œ λ…λ¦½λœ ν•˜μœ„ λ‹¨μœ„' ( 즉, ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” κ΅¬μ„±μš”μ†Œ 쀑 ν•˜λ‚˜μ˜ κ΅¬μ„±μš”μ†Œμ˜ λ‹¨μœ„λ₯Ό 이야기 ν•œλ‹€.)

 

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 규λͺ¨κ°€ 점차 μ»€μ§€λ©΄μ„œ 파일의 양도 점점 컀져 λ°œμƒν•˜λŠ” λ¬Έμ œμ λ“€μ΄ μƒκ²¨λ‚¬λŠ”λ°,

λͺ¨λ“ˆκ°„μ˜ μŠ€μ½”ν”„κ°€ ꡬ뢄이 λ˜μ§€ μ•Šμ•„ λ‹€λ₯Έ νŒŒμΌμ— 영ν–₯을 λΌμΉ˜λŠ” 일이 λ°œμƒν•˜κ³  또, 파일의 양이 λ§Žμ•„μ§€λ©΄μ„œ λ§Žμ€ νŒŒμΌμ„ μ‘λ‹΅ν•˜λŠ”λ° λ‹€μ†Œ λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ˜λŠ” 일이 λ°œμƒν•˜κΈ°λ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 

이와같은 λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ²ˆλ“€λŸ¬(Bundler) κ°€ λ“±μž₯ν•˜κ²Œ 된 κ²ƒμž…λ‹ˆλ‹€.

 

즉, λͺ¨λ“ˆ λ²ˆλ“€λŸ¬λŠ” μ—¬λŸ¬κ°œλ‘œ λ‚˜λ‰˜μ–΄ μžˆλŠ” νŒŒμΌλ“€μ„ ν•˜λ‚˜μ˜ 파일둜 λ¬Άμ–΄μ£ΌλŠ” 역할을 ν•¨μœΌλ‘œμ¨ μœ„μ™€κ°™μ€ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•΄ μ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€.

λŒ€ν‘œμ μœΌλ‘œ webpack, parcel, browserifyκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜μ€ webpack에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

🌈 Webpack

 

1. webpackμ΄λž€?

webpack은 μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž¨μ„ μœ„ν•œ 정적 λͺ¨λ“ˆ λ²ˆλ“€λŸ¬ μž…λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨μ„ μ²˜λ¦¬ν• λ•Œ ν•„μš”ν•œ λͺ¨λ“  λͺ¨λ“ˆμ„ λ§€ν•‘ν•˜κ³  ν•˜λ‚˜ μ΄μƒμ˜ λ²ˆλ“€μ„ μƒμ„±ν•©λ‹ˆλ‹€. 

(κ΅¬λ™λ˜λŠ” 방법은 κ·ΈλŒ€λ‘œ ν•˜λ˜, λ‚΄λΆ€μ˜ μ½”λ“œλ₯Ό 더 효율적으둜 λ°”κΏ”μ£ΌλŠ” 것 이라고도 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

2. webpack 의 κ°œλ…

✍Entry 

λͺ¨λ“ˆ μ›ΉνŽ™μ΄ λ‚΄λΆ€ ꡬ좕 μ‹œμž‘μ„ μ‚¬μš©ν•΄μ•Όν•˜λŠ” μ‹œμž‘μ„ μ˜λ―Έν•©λ‹ˆλ‹€. (기본적으둜 값은 ./src/index.js) 


✍Output 

ꡬ좕을 μ‹œμž‘ν•˜μ—¬ λ°©μΆœν•˜λŠ” 곳을 μ˜λ―Έν•˜λ©°, λ²ˆλ“€ 파일의 생성과 이름을 μ§€μ •ν•©λ‹ˆλ‹€.

κΈ°λ³Έ νŒŒμΌμ€ ./dist/main.js 으둜 μ§€μ •λ©λ‹ˆλ‹€. 

 

✍Loader

기본적으둜  webpack은 JavaScript 및 JSON 파일 만 을 μ΄ν•΄ν•©λ‹ˆλ‹€. 

ν•˜μ§€λ§Œ Loaderλ₯Ό μ‚¬μš©ν•˜λ©΄ μ›ΉνŒ©μ΄ λ‹€λ₯Έ μœ ν˜•μ˜ νŒŒμΌμ„ μ²˜λ¦¬ν•˜κ³  이λ₯Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ‚¬μš©ν•˜κ³  쒅속성 κ·Έλž˜ν”„μ— μΆ”κ°€ ν•  μˆ˜μžˆλŠ” μœ νš¨ν•œ λͺ¨λ“ˆ λ‘œ λ³€ν™˜ ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 

✍Plugin

λ‘œλ”λŠ” νŠΉμ • μœ ν˜•μ˜ λͺ¨λ“ˆμ„ λ³€ν™˜ν•˜λŠ”λ° μ‚¬μš©λ˜μ§€λ§Œ ν”ŒλŸ¬κ·ΈμΈμ„ ν™œμš©ν•˜μ—¬ λ²ˆλ“€ μ΅œμ ν™” , asset 관리 및 ν™˜κ²½ λ³€μˆ˜ μ‚½μž…κ³Ό 같은 κ΄‘λ²”μœ„ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 

3. webpack μ„€μΉ˜λ°©λ²•

1. node.js둜 ν”„λ‘œμ νŠΈ μ„ μ–Έ (package.json이 λ‹€μš΄λ‘œλ“œλœλ‹€)

   *package.jason은 ν”„λ‘œμ νŠΈμ— κ΄€ν•œ μ„€λͺ…이 λ“€μ–΄μžˆλ‹€.*

npm init

 

2. webpack / webpack-cli package μ„€μΉ˜ν•˜κΈ°

npm install -D webpack webpack-cli

 -D μ˜΅μ…˜μ€ dependencies (배포용) devDependencies (개발용)이 μžˆλŠ”λ°, 개발용 μ˜΅μ…˜μ„ μ‚¬μš©ν• λ•Œ μž…λ ₯ν•œλ‹€.

 

μ„€μΉ˜κ°€ μ™„λ£Œλ˜λ©΄, μ•„λž˜μ™€ 같이 package.json에 webpackκ³Ό webpack-cliκ°€ μ„€μΉ˜λœ 것 을 λ³Ό 수 μžˆλ‹€.

  "devDependencies": {

    "webpack""^5.37.1",

    "webpack-cli""^4.7.0"

  }

 

 

3.  webpack μ‹€ν–‰ν•˜κΈ°

npx webpack --entry ./source/index.js --output-path ./public/index_bundle.js

// ./source/index.js μ—μ„œ μ‹œμž‘ν•΄μ„œ κ·Έ 파일이 μ‚¬μš©λ˜κ³  μžˆλŠ” λͺ¨λ“  νŒŒμΌλ“€μ„ ν•˜λ‚˜λ‘œ λ²ˆλ“€μ„ λ§Œλ“€μ–΄μ„œ
// ./public/index_bundle.js둜 좜λ ₯해라 

 

 

 

 

μœ„ λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰ν•˜λ©΄ ./public/index_bundle.js κ²½λ‘œμ— main.jsκ°€ μƒμ„±λœ 것 을 λ³Ό μˆ˜μžˆλ‹€.

 

 

 

 

 

πŸ– create-react-app 으둜 webpack 을 μ„€μΉ˜ ν•  λ•ŒλŠ”?

κΈ°λ³Έ Webpack 섀정듀이 λ˜μ–΄ μžˆκΈ°λ•Œλ¬Έμ— 섀정듀을 보기 μœ„ν•΄μ„œλŠ” ejectν•΄μ•„ν•œλ‹€. 

npx run eject

 

 

 

 

<참쑰 자료>

 

https://webpack.js.org/concepts/

 

Concepts | webpack

webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

webpack.js.org

 

 

 

 

'μ½”λ”©' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

πŸ“DOM κ³Ό λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ •  (0) 2021.05.28
πŸ“Window Size  (0) 2021.05.27
πŸ’»Web API λž€ λ¬΄μ—‡μΌκΉŒ?  (0) 2021.05.27
πŸ™ŒProcess와 Multithreadλž€?  (0) 2021.04.20