Skip to content

webpack_JC

jch422 edited this page Dec 19, 2020 · 1 revision

Webpack μ΄λž€?

  • λͺ¨λ“ˆ λ²ˆλ“€λŸ¬(Module Bundler)
    • λͺ¨λ“ˆ: ν”„λ‘œκ·Έλž˜λ° κ΄€μ μ—μ„œ νŠΉμ • κΈ°λŠ₯을 κ°–λŠ” μž‘μ€ μ½”λ“œ λ‹¨μœ„
    • λ²ˆλ“€λŸ¬: μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” μžμ›(HTML, CSS, Javscript, Images λ“±)을 λͺ¨λ‘ 각각의 λͺ¨λ“ˆλ‘œ 보고 이λ₯Ό μ‘°ν•©ν•΄μ„œ λ³‘ν•©λœ ν•˜λ‚˜μ˜ 결과물을 λ§Œλ“œλŠ” 도ꡬ

μ›ΉνŒ©μœΌλ‘œ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” 문제

  • μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜ 유효 λ²”μœ„
  • λΈŒλΌμš°μ €λ³„ HTTP μš”μ²­ 숫자의 μ œμ•½
  • μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œμ˜ 관리
  • Dynamic Loading & Lazy Loading 미지원
    • μ›ΉνŒ©μ˜ Code Splitting κΈ°λŠ₯을 μ΄μš©ν•˜μ—¬ μ›ν•˜λŠ” λͺ¨λ“ˆμ„ μ›ν•˜λŠ” 타이밍에 λ‘œλ”©ν•  수 μžˆλ‹€.

μ›ΉνŒ©μ˜ 4κ°€μ§€ μ£Όμš” 속성

  • entry

    • μ›Ή μžμ›μ„ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 졜초 μ§„μž…μ μ΄μž μžλ°”μŠ€ν¬λ¦½νŠΈ 파일 경둜
    •   module.exports = {
          entry: './src/index.js'
        }
      
    • entry 속성에 μ§€μ •λœ νŒŒμΌμ—λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ „λ°˜μ μΈ ꡬ쑰와 λ‚΄μš©μ΄ 담겨져 μžˆμ–΄μ•Ό ν•œλ‹€.
  • output

    • μ›ΉνŒ©μ„ 돌리고 λ‚œ 결과물의 파일 경둜
    •   const path = require('path');
      
        module.exports = {
          output: {
            filename: 'bundle.js',
            path: path.resolve(__dirname, './dist')
          }
        }
      
    • filename: μ›ΉνŒ©μœΌλ‘œ λΉŒλ“œν•œ 파일의 이름
    • path: ν•΄λ‹Ή 파일의 경둜λ₯Ό 의미
  • loader

    • μ›ΉνŒ©μ΄ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 해석할 λ•Œ μžλ°”μŠ€ν¬λ¦½νŠΈ 파일이 μ•„λ‹Œ μ›Ή μžμ›(HTML, CSS, Images, 폰트 λ“±)듀을 λ³€ν™˜ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 속성
    •   module.exports = {
          module: {
            rules: [
                {
                    test: /\.css$/,
                    use: ['css-loader']
                }
            ]
          }
        }
      
    • test : λ‘œλ”λ₯Ό μ μš©ν•  파일 μœ ν˜•
    • use : ν•΄λ‹Ή νŒŒμΌμ— μ μš©ν•  λ‘œλ”μ˜ 이름
    • λ‘œλ” 적용 μˆœμ„œ: 였λ₯Έμͺ½μ—μ„œ μ™Όμͺ½ 순으둜 적용됩
    • 자주 μ‚¬μš©λ˜λŠ” λ‘œλ”
      • babel Loader
      • css-Loader
      • file-Loader
  • plugin

    • μ›ΉνŒ©μ˜ 기본적인 λ™μž‘μ— 좔가적인 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 속성
    • loaderλŠ” νŒŒμΌμ„ ν•΄μ„ν•˜κ³  λ³€ν™˜ν•˜λŠ” 과정에 κ΄€μ—¬ν•˜λŠ” 반면, plugin은 ν•΄λ‹Ή 결과물의 ν˜•νƒœλ₯Ό λ°”κΎΈλŠ” 역할을 ν•œλ‹€
    •   var webpack = require('webpack');
        var HtmlWebpackPlugin = require('html-webpack-plugin');
      
        module.exports = {
          plugins: [
            new HtmlWebpackPlugin(),
            new webpack.ProgressPlugin()
          ]
        }   
      
    • HtmlWebpackPlugin : μ›ΉνŒ©μœΌλ‘œ λΉŒλ“œν•œ 결과물둜 HTML νŒŒμΌμ„ μƒμ„±ν•΄μ£ΌλŠ” ν”ŒλŸ¬κ·ΈμΈ
    • ProgressPlugin : μ›ΉνŒ©μ˜ λΉŒλ“œ μ§„ν–‰μœ¨μ„ ν‘œμ‹œν•΄μ£ΌλŠ” ν”ŒλŸ¬κ·ΈμΈ

μš”μ•½

  • Entry 속성은 μ›ΉνŒ©μ„ μ‹€ν–‰ν•  λŒ€μƒ 파일. μ§„μž…μ 
  • Output 속성은 μ›ΉνŒ©μ˜ 결과물에 λŒ€ν•œ 정보λ₯Ό μž…λ ₯ν•˜λŠ” 속성. 일반적으둜 filenameκ³Ό pathλ₯Ό μ •μ˜
  • Loader 속성은 CSS, 이미지와 같은 λΉ„ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ„ μ›ΉνŒ©μ΄ 인식할 수 있게 μΆ”κ°€ν•˜λŠ” 속성. λ‘œλ”λŠ” 였λ₯Έμͺ½μ—μ„œ μ™Όμͺ½ 순으둜 적용
  • Plugin 속성은 μ›ΉνŒ©μœΌλ‘œ λ³€ν™˜ν•œ νŒŒμΌμ— 좔가적인 κΈ°λŠ₯을 λ”ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” 속성. μ›ΉνŒ© λ³€ν™˜ κ³Όμ • μ „λ°˜μ— λŒ€ν•œ μ œμ–΄κΆŒμ„ κ°–κ³  있음

μ›ΉνŒ© μ‹€ν–‰ λͺ¨λ“œ - mode

  • μ›ΉνŒ© 버전 4λΆ€ν„° modeλΌλŠ” κ°œλ…μ΄ μΆ”κ°€

    • none : λͺ¨λ“œ μ„€μ • μ•ˆν•¨
    • development : 개발 λͺ¨λ“œ
    • production : 배포 λͺ¨λ“œ(default
  • development mode인 κ²½μš°μ—λŠ” κ°œλ°œμžλ“€μ΄ μ’€ 더 보기 νŽΈν•˜κ²Œ μ›ΉνŒ© λ‘œκ·Έλ‚˜ 결과물이 보여지고, production mode인 κ²½μš°μ—λŠ” μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ 기본적인 파일 μ••μΆ• λ“±μ˜ λΉŒλ“œ 과정이 μΆ”κ°€λ©λ‹ˆλ‹€.

μ†ŒμŠ€ λ§΅ - devtool

  • 배포용으둜 λΉŒλ“œν•œ 파일과 원본 νŒŒμΌμ„ μ„œλ‘œ μ—°κ²°μ‹œμΌœμ£ΌλŠ” κΈ°λŠ₯
  • λ²ˆλ“€ 파일의 νŠΉμ • λΆ€λΆ„(주둜 μ—λŸ¬κ°€ λ°œμƒν•œ λΆ€λΆ„)이 원본 μ†ŒμŠ€μ˜ μ–΄λ–€ 뢀뢄인지 ν™•μΈν•˜κ³  싢을 λ•Œ 유용
  •   module.exports = {
        devtool: 'cheap-eval-source-map'
      }
    
  • μ†ŒμŠ€ λ§΅ μ„€μ • μ˜΅μ…˜ λΉ„κ΅ν‘œ

Clone this wiki locally