Webpack
μΈνλ° νλ‘ νΈμλ κ°λ°μλ₯Ό μν μΉν© / μ₯κΈ°ν¨(μΊ‘ν΄νκ΅)
Node.jsμ NPM
μΉν©μ μ¬μ©νκΈ° μν΄ Node.jsμ NPMμ΄ μ€μΉλμ΄ μμ΄μΌ ν¨ Node.jsλ₯Ό μ€μΉνλ©΄ NPMμ ν¨κ» μ€μΉκ° λ¨
Node.js
λΈλΌμ°μ λ°μμλ μλ°μ€ν¬λ¦½νΈλ₯Ό μ€νν μ μλ νκ²½μ μλ―Έ
NPM(Node Package Manager)
μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬(ν¨ν€μ§)λ₯Ό κ΄λ¦¬ν΄μ£Όλ λꡬ(jQuery, Tensorflow, express λ±) λΌμ΄λΈλ¬λ¦¬λ₯Ό 곡κ°λ μ μ₯μμ μ¬λ €λκ³ npm λͺ λ Ήμ΄λ‘ νΈνκ² λ€μ΄λ‘λ λ°μ μ μμ
node -v
: λ Έλ λ²μ νμΈnpm -v
: NPM λ²μ νμΈnpm init [-y]
: NPM μ΄κΈ°ν λͺ λ Ήμ΄(-y κΈ°λ³Έκ°μΌλ‘ package.jsonνμΌ μμ±)npm install [library] (--save-prod)
: λΌμ΄λΈλ¬λ¦¬ μ§μ μ€μΉ1(node_modules/library/dist/library.js)npm install [library] --save-dev(-D)
: λΌμ΄λΈλ¬λ¦¬ μ§μ μ€μΉ2(devDependenciesλ‘ κ΄λ¦¬)npm uninstall [library]
: λΌμ΄λΈλ¬λ¦¬ μμ npm install [library] --global(-g)
: λΌμ΄λΈλ¬λ¦¬ μμ€ν λ 벨μ μ μ(global)μΌλ‘ μ€μΉ
μ§μ μ€μΉ vs μ μ μ€μΉ
μ§μ μ€μΉ : ν΄λΉ ν΄λ λ΄μμ node_modules ν΄λλ₯Ό μμ±νμ¬ μ€μΉ
μ μ μ€μΉ : μμ€ν λ 벨μ μ μμΌλ‘ μ€μΉνμ¬ ν°λ―Έλμμ λΌμ΄λΈλ¬λ¦¬ μ΄λ¦μ μ λ ₯νμλ λͺ λ Ήμ΄λ‘ μΈμ
NPMμ μ¬μ©νλ μ΄μ
νλ‘μ νΈμ μ¬μ©νλ package(λΌμ΄λΈλ¬λ¦¬)μ λ²μ κ΄λ¦¬
ν΄λΉ package CDNμ μ§μ μ°Ύμμ κ°μ Έμ€μ§ μκ³ npm installλ‘ λ°λ‘ μ€μΉ κ°λ₯
λλΆλΆμ μΉν© νλ‘μ νΈλ κΈ°λ³Έμ μΌλ‘ npmμ΄ λλ°λ¨
dependenciesμ devDependencies
dependencies : npm i [library]
μ ν리μΌμ΄μ μ νλ©΄λ‘μ§κ³Ό μ§μ μ κ΄λ ¨μ΄ μλ λΌμ΄λΈλ¬λ¦¬(ex.jquery, vue, react, angular, chart λ±)
devDependencies : npm i [library] -D
κ°λ°μ ν λ λμμ μ£Όλ κ°λ° 보쑰 λΌμ΄λΈλ¬λ¦¬(ex.webpack, sass, js-compression λ±)
λ°°ν¬μ© λΌμ΄λΈλ¬λ¦¬ dependencies
npm run build
λ‘ λΉλλ₯Ό νλ©΄ μ΅μ’ μ ν리μΌμ΄μ μ½λ μμ ν¬ν¨λ¨
κ°λ°μ© λΌμ΄λΈλ¬λ¦¬ devDependencies
μ΅μ’ λ°°ν¬ μ ν¬ν¨λμ§ μμ
μΉν© Webpack
νλ‘ νΈμλ νλ μμν¬μμ κ°μ₯ λ§μ΄ μ¬μ©λλ λͺ¨λ λ²λ€λ¬(Module Bundler) λͺ¨λ λ²λ€λ¬λ? μΉ μ ν리μΌμ΄μ μ ꡬμ±νλ μμμ λͺ¨λ κ°κ° λͺ¨λλ‘ λ³΄κ³ μ‘°ν©ν΄μ λ³ν©λ νλμ κ²°κ³Όλ¬Όμ λ§λλ λꡬ
webpack webpack-cli
lodash
dist/main.js
: μΉν©μΌλ‘ ꡬμ±ν κ²°κ³Όλ¬Ό(μ¦μμ€νν¨μIIFE ꡬμ±)μλ°μ€ν¬λ¦½νΈλ§μ μν λκ΅¬κ° μλ μΉμ ꡬμ±νλ λͺ¨λ 리μμ€μ λν λꡬμ
devtool: 'source-map'
: λΉλ ν μλ νμΌλ‘ μ°κ²°
λͺ¨λ λ²λ€λ§μ΄λ?
μΉ μ ν리μΌμ΄μ μ ꡬμ±νλ λͺμ, λͺλ°±κ°μ μμλ€μ νλμ νμΌλ‘ λ³ν© λ° μμΆν΄μ£Όλ λμ(λΉλ==λ³ν==λ²λ€λ§)
λͺ¨λ μ΄λ?
νλ‘κ·Έλ¨μμ νΉμ κΈ°λ₯μ κ°λ μμ μ½λ λ¨μλ₯Ό μλ―Έ
μΉν©μ λ±μ₯λ°°κ²½
νμΌ λ¨μμ μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ΄λ¦¬
νμΌλ¨μλ‘ μ€μ½νκ° κ΅¬λΆλμ§ μμ(μ μλ³μ)
μΉ κ°λ° μμ μλν λꡬ
μΉ μ ν리μΌμ΄μ μ λΉ λ₯Έ λ‘λ© μλμ λμ μ±λ₯
μΉν©μ κΈ°λ³Έμ μΌλ‘ νμν μμμ 미리 λ‘λ©νλκ² μλλΌ κ·Έ λ κ·Έ λ μμ²νμλ μ² νμ κ°κ³ μμ
μΉν©μΌλ‘ ν΄κ²°νλ €λ λ¬Έμ
λΈλΌμ°μ λ³ HTTP μμ² μ«μμ μ μ½
TCP μ€νμ λ°λΌ λΈλΌμ°μ μμ νλ²μ μλ²λ‘ λ³΄λΌ μ μλ HTTPμμ² μ«μλ μ μ½λμ΄ μμ
Dynamic Loading & Lazy Loading λ―Έμ§μ
μΉν©μ μ£Όμμμ±
mode
λ²μ 4 μ΄μμμ μΆκ°λ μμ±
'none'
'production'
'development'
Entry
μΉν©μμ μΉ μμμ λ³ννκΈ° μν΄ νμν μ΅μ΄ μ§μ μ μ΄μ μλ°μ€ν¬λ¦½νΈ νμΌ, κ²½λ‘
μΉ μ ν리μΌμ΄μ μ μ λ°μ μΈ κ΅¬μ‘°μ λ΄μ©μ΄ λ΄κΉ
Output
μΉν©μ λλ¦¬κ³ λ κ²°κ³Όλ¬Όμ νμΌ κ²½λ‘
μ΅μν
filename
μ μ§μ ν΄μ€μΌν¨νμΌ μ΄λ¦ μ΅μ μ λ§€ λΉλμ κ³ μ ν΄μκ°μ λΆμ¬ μλ‘κ³ μΉ¨ν΄μΌνλ μν©μ λ°©μ§ν μ μμ
Loader(module)
μΉν©μ΄ μΉ μ ν리μΌμ΄μ μ ν΄μν λ μλ°μ€ν¬λ¦½νΈ νμΌμ΄ μλ μΉ μμλ€μ λ³νν μ μλλ‘ λμμ£Όλ μμ±
{ test: /\.css$/, use: ['style-loader', 'css-loader'] // λͺ¨λ cssνμΌμ λν΄ λ‘λ μ μ© // rules μλμ κ°μ²΄λ₯Ό μΆκ°ν΄ λκ°λ©΄μ κ° νμΌλ€μ μ μ© // λ‘λ μμλ μν₯μ΄ μμ(μ€λ₯Έμͺ½μμ μΌμͺ½μμλ‘ μ μ©) }
plugin(plugins)
μΉν©μ κΈ°λ³Έμ μΈ λμμ μΆκ°μ μΈ κΈ°λ₯μ μ 곡νλ μμ±
νλ¬κ·ΈμΈμ κ²°κ³Όλ¬Όμ ννλ₯Ό λ°κΎΈλ μν
Webpack Dev Server
μΉ μ ν리μΌμ΄μ μ κ°λ°νλ κ³Όμ μμ μ μ©νκ² μ°μ΄λ λꡬ μΉν©μ λΉλ λμ νμΌμ΄ λ³κ²½ λμμ λ μ½λλ§ λ³κ²½νκ³ μ μ₯νλ©΄ μΉν©μΌλ‘ λΉλν ν μλ‘κ³ μΉ¨ ν΄μ€ μΉν©μ λΉλ μκ° λν μ€μ¬μ€
// package.json
"scripts": {
"dev": "webpack serve",
"build": "webpack"
}
//webpack.config.js
devServer: {
port: 9000,
}
μΉν© λ°λΈ μλ²λ‘ λΉλν κ²°κ³Όλ¬Όμ λ©λͺ¨λ¦¬μ μ μ₯λκ³ νμΌλ‘ μμ±νμ§ μμ(νμΌ μμ€ν μ λμ€μ§ μμ)
μΉν© λ°λΈ μλ²λ κ°λ°ν λλ§ μ¬μ©νλ€κ° μλ£λλ©΄ μΉν© λͺ λ Ήμ΄λ₯Ό μ΄μ©ν΄ κ²°κ³Όλ¬Όμ νμΌλ‘ μμ±
μ»΄ν¨ν° ꡬ쑰 κ΄μ μμ νμΌ μ μΆλ ₯λ³΄λ€ λ©λͺ¨λ¦¬ μ μΆλ ₯μ΄ λ λΉ λ₯΄κ³ μμμ΄ λ μλͺ¨λ¨
Last updated