-
Notifications
You must be signed in to change notification settings - Fork 5
Webpack
jch422 edited this page Dec 19, 2020
·
6 revisions
- λͺ¨λ λ²λ€λ¬(Module Bundler)
- λͺ¨λ: νλ‘κ·Έλλ° κ΄μ μμ νΉμ κΈ°λ₯μ κ°λ μμ μ½λ λ¨μ
- λ²λ€λ¬: μΉ μ ν리μΌμ΄μ μ ꡬμ±νλ μμ(HTML, CSS, Javscript, Images λ±)μ λͺ¨λ κ°κ°μ λͺ¨λλ‘ λ³΄κ³ μ΄λ₯Ό μ‘°ν©ν΄μ λ³ν©λ νλμ κ²°κ³Όλ¬Όμ λ§λλ λꡬ
- μλ°μ€ν¬λ¦½νΈ λ³μ μ ν¨ λ²μ
- λΈλΌμ°μ λ³ HTTP μμ² μ«μμ μ μ½
- μ¬μ©νμ§ μλ μ½λμ κ΄λ¦¬
- Dynamic Loading & Lazy Loading λ―Έμ§μ
- μΉν©μ Code Splitting κΈ°λ₯μ μ΄μ©νμ¬ μνλ λͺ¨λμ μνλ νμ΄λ°μ λ‘λ©ν μ μλ€.
-
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 μμ±μ μΉν©μΌλ‘ λ³νν νμΌμ μΆκ°μ μΈ κΈ°λ₯μ λνκ³ μΆμ λ μ¬μ©νλ μμ±. μΉν© λ³ν κ³Όμ μ λ°μ λν μ μ΄κΆμ κ°κ³ μμ
-
μΉν© λ²μ 4λΆν° modeλΌλ κ°λ μ΄ μΆκ°
- none : λͺ¨λ μ€μ μν¨
- development : κ°λ° λͺ¨λ
- production : λ°°ν¬ λͺ¨λ(default
-
development modeμΈ κ²½μ°μλ κ°λ°μλ€μ΄ μ’ λ 보기 νΈνκ² μΉν© λ‘κ·Έλ κ²°κ³Όλ¬Όμ΄ λ³΄μ¬μ§κ³ , production modeμΈ κ²½μ°μλ μ±λ₯ μ΅μ νλ₯Ό μν΄ κΈ°λ³Έμ μΈ νμΌ μμΆ λ±μ λΉλ κ³Όμ μ΄ μΆκ°λ©λλ€.
-
λ°°ν¬μ©μΌλ‘ λΉλν νμΌκ³Ό μλ³Έ νμΌμ μλ‘ μ°κ²°μμΌμ£Όλ κΈ°λ₯
-
λ²λ€ νμΌμ νΉμ λΆλΆ(μ£Όλ‘ μλ¬κ° λ°μν λΆλΆ)μ΄ μλ³Έ μμ€μ μ΄λ€ λΆλΆμΈμ§ νμΈνκ³ μΆμ λ μ μ©
-
module.exports = { devtool: 'cheap-eval-source-map' } -
π Advanced
-
- url-loaderμ μ΄λ―Έμ§ νμΌμ base-64λ‘ λ³ννμ¬ μ΄λ―Έμ§ νμΌμ λ²λ€ νμΌμ ν¬ν¨ μν€λ κΈ°λ₯μ κ°μ§κ³ μλ€.
- μ΄λ―Έμ§ νμΌμ λ²λ€ νμΌμ ν¬ν¨ μν΄μΌλ‘μ¨ νμΌ μμ² νμλ₯Ό μ€μΌ μ μλ€. κ·Έλ¬λ νμΌμ΄ λ무 ν¬λ©΄ μνλκ² μ’λ€.
- https://jeonghwan-kim.github.io/js/2017/05/22/webpack-file-loader.html
-
λ무 νλ€κΈ°(tree shaking)
- (λ²λ€μ) λΆνμν μ½λλ₯Ό μ κ±°ν΄ μ£Όλ κΈ°λ₯
- κΈ°λ³Έμ μΌλ‘ μ 곡 λμ΄ μλ€
//util.js export const func1 = () => { console.log('func1'); } export const func2 = () => { console.log('func2') } //use.js import { func1 } from ./util.js func1();
- μ μ½λ λ²λ€μμ func2λ λ²λ€μ μλ€μ΄κ° μλ€.(treeshaking)
- tree shaking μ€ν¨ νλ κ²½μ°
- μ¬μ©λλ λͺ¨λμ΄ ESMμ΄ μλ κ²½μ°
- μ¬μ©νλ μͺ½μμ ESMμ΄ μλ λ€λ₯Έ λͺ¨λ μμ€ν μ μ¬μ©νλ κ²½μ°
- λμ μν¬νΈλ₯Ό μ¬μ©νλ κ²½μ°
- μΈλΆ ν¨ν€μ§ tree shaking
//μλͺ»λ μ import { fill } from 'lodash' //μ μ¬μ©ν μ import fill from 'lodash/fill'
-
- λ²λ€μ μκ² λΆν ν΄μ μ¬μ©.
- κ·Έλκ·Έλ νμν μ½λκ° λ€μ΄κ° μλ λ²λ€λ§ μ¬μ©
- λΆνμν μ½λκΉμ§ μ μ‘ λλκ²μ λ°©μ§
- μκ² λΆν νμ¬ νμ΄μ§ λ λλ§ μ΅μν
-
- μ€μ ν λͺ¨λμ μλμΌλ‘ λ±λ‘ ν΄μ€λ€.
new webpack.ProvidePlugin({ React: 'react' })
- μ μ½λλ₯Ό μ¬μ©μ Reactλ₯Ό μλμΌλ‘ λ±λ‘ ν΄μ€μΌλ‘μ¨ λ§€λ² import React from 'react'λ₯Ό μΈ νμκ±° μμ΄μ§λ€.
-
