λ‘λκ° νμΌ(λͺ¨λ) λ¨μλ‘ κΈ°λ₯μ μ²λ¦¬νλ λ°λ©΄, νλ¬κ·ΈμΈμ μ΅μ’
μ μΌλ‘ λ²λ€λ κ²°κ³Όλ¬Όμ κ°κ³΅νκ³ μ ν λ μ¬μ©ν©λλ€.
Β
λ§μ΄ μ¬μ©νλ νλ¬κ·ΈμΈ λͺ κ°μ§λ₯Ό μκ°ν©λλ€
1. BannerPlugin
λ²λ€λ§λ νμΌμ μ΅μλ¨μ λ°°λ(μ£Όμ)λ₯Ό λ¬μμ£Όλ νλ¬κ·ΈμΈμ
λλ€. μ£Όλ‘ λΉλμ κ΄λ ¨λ μ 보 (λΉλ λ μ§, λΉλ λ²μ λ±)λ₯Ό μ 곡ν λ μ¬μ©ν©λλ€.
Β
- webpack.config.js νμΌμ webpack λͺ¨λμ λΆλ¬μ΅λλ€. μΉν©μμ κΈ°λ³Έμ μΌλ‘ μ 곡νλ νλ¬κ·ΈμΈμ΄κΈ° λλ¬Έμ μ€μΉκ° νμ μμ΅λλ€.
const webpack = require('webpack');
Β
- Module νλ¨μ plugins μμ±μ μΆκ°ν©λλ€.
plugins: [ new webpack.BannerPlugin({ banner: 'λ°°λμ λλ€!!' }) ]
Β
- λΉλνκ³ κ²°κ³Όλ₯Ό νμΈν©λλ€.
Β
νμ
μμ κΉκ³Ό κ΄λ ¨λ μ 보λ₯Ό λ°°λμ μΆκ°ν΄μΌν κ²½μ°λ μμκ²λλ€. νλ‘μ νΈλ₯Ό κΉνλΈμ μ°κ²°νκ³ λ°°λμ κ΄λ ¨ μ 보λ₯Ό μΆκ°ν΄ λ΄
μλ€!
Β
<λ―Έλ νλ‘μ νΈ>
κΉμ΄λ νλ‘μ νΈ μ°κ²°νκ³ λ°°λ νλ¬κ·ΈμΈμ κΉ μ 보 μΆκ°νκΈ°
Β
- git init μ ν΅ν΄ κΉ νλ‘μ νΈμμ μλ €μ€λλ€.
git init
Β
- μ΄μ νμΌλ€μ΄ κΉμ μν΄ μΆμ λ©λλ€. νμ μλ νμΌλ€μ .gitignore μ λ±λ‘ν©λλ€.
- .gitignore νμΌμ λ£¨νΈ λλ ν 리μ μμ±ν©λλ€.
- 무μν΄μΌν λͺ©λ‘μ μμ±ν©λλ€. (node_modules ν΄λ 무μ, dist λλ ν 리 νμμ λͺ¨λ λ΄μ© 무μ)
node_modules dist/*
c. κΉνλΈμμ μ°κ²°ν λ ν¬μ§ν 리λ₯Ό μμ±ν©λλ€.
d. ν°λ―Έλμμ λ ν¬μ§ν 리μ νλ‘μ νΈ ν΄λλ₯Ό μ°κ²°ν©λλ€.
git branch -m main (-m : move) git remote add origin "λ ν¬ μ£Όμ" git add . git commit -m "first commit" git push -u origin main
Β
- μ΄μ κΉκ³Ό νλ‘μ νΈκ° μ°κ²°λμμ΅λλ€. κΉμ μ 보λ₯Ό μΉν©μΌλ‘ λκΈ°λ λ°©λ²μ μμλ³΄κ² μ΅λλ€.
- ν°λ―Έλμμ κΉ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μ¬λ¬ μ 보λ₯Ό νμΈ ν μ μμ΅λλ€.
git rev-parse --short HEAD git config user.name
b. μ΄λ° ν°λ―Έλ λͺ
λ Ήμ΄λ₯Ό μΉν©μμλ μ¬μ©ν μ μλλ‘ λͺ¨λμ μΆκ°ν©λλ€.
const childProcess = require('child_process');
c. λ°°λμ ν°λ―Έλ μ½λλ₯Ό μΆκ°ν©λλ€.
commit version : ${childProcess.execSync('git rev-parse --short HEAD')} committer : ${childProcess.execSync('git config user.name')}
d. λ€μ λΉλν΄λ΄
μλ€!
Β
2. DefinePlugin
λνμΈ νλ¬κ·ΈμΈμ μ ν리μΌμ΄μ
μμ μ¬μ©ν μ μλ μ μ μμλ₯Ό λ§λ€μ μμ΅λλ€.
λ
Έλμ νκ²½μ 보λ₯Ό μ ν리μΌμ΄μ
μ μ λ¬ν΄μ£Όκ³ μΆμλ λ§μ΄ μ¬μ©ν©λλ€. λνμΈ νλ¬κ·ΈμΈλ μΉν©μμ κΈ°λ³ΈμΌλ‘ μ 곡νλ νλ¬κ·ΈμΈμ
λλ€.
Β
λ°λ‘ νλ¬κ·ΈμΈμ μΆκ°ν΄λ΄
μλ€!
new webpack.DefinePlugin({ pw: 123456 }),
Β
Β
3. HtmlWebpackPlugin
Html νμΌμ λ²λ€λ§ λ¨κ³μμ 컨νΈλ‘€ ν μ μλλ‘ λμμ£Όλ νλ¬κ·ΈμΈ μ
λλ€.
Β
- νλ¬κ·ΈμΈμ μ€μΉν©λλ€.
npm install html-webpack-plugin
Β
- webpack.config.js νμΌμ html-webpack-plugin νλ¬κ·ΈμΈ λͺ¨λμ λΆλ¬μ΅λλ€.
const HtmlWebpackPlugin = require('html-webpack-plugin');
Β
- λ²λ€λ§ λ μ²λ¦¬νκ³ μ νλ html νμΌμ src ν΄λλ‘ μ΄λμν΅λλ€.
Β
- webpack.config.js νμΌμ νλ¬κ·ΈμΈκ³Ό νκ² html νμΌμ κ²½λ‘λ₯Ό λ±λ‘ν©λλ€.
new HtmlWebpackPlugin({ template: './src/index.html', // λͺ©ν html νμΌμ μμΉμ λλ€. })
Β
- npm run build! μ΄μ λ²λ€λ§ λ¨κ³μμ html μ΄ μ²λ¦¬κ° λλκ²μ νμΈ ν μ μμ΅λλ€.
Β
<λ―Έλ νλ‘μ νΈ>
κ°λ° νκ²½μ λ°λ₯Έ HTML κ²½λν(minify) λ²λ€λ§νκΈ°!
Β
- webpack.config.js νμΌμ HtmlWebpackPlugin κ°μ²΄μ λ€μμ μ½λλ₯Ό μΆκ°ν©λλ€.
minify: { collapseWhitespace: true, removeComments: true, }
collapseWhitespace : 곡백μ λͺ¨λ μ κ±°ν©λλ€.
removeComments : μ£Όμμ λͺ¨λ μ κ±°ν©λλ€.
Β
- λ€μ λΉλνμ¬ κ²°κ³Όλ¬Όμ νμΈν©λλ€. μ μμΆμ΄ λμ΄ μλ λͺ¨μ΅μ νμΈ ν μ μμ΅λλ€. νμ§λ§ κ°λ°νκ²½μμλ μ΄λ° λͺ¨μ΅μ΄λΌλ©΄ μ μ§λ³΄μνκΈ° λ§€μ° μ΄λ €μΈκ²λλ€. νλ‘λμ νκ²½μμλ§ κ²½λνλλλ‘ μ€μ ν΄λ΄ μλ€!
Β
- webpack.config.js νμΌμ HtmlWebpackPlugin κ°μ²΄μ minify λΆλΆμ μμ ν΄λ΄ μλ€.
minify: process.env.NODE_ENV === 'production' ? { collapseWhitespace: true, removeComments: true, } : false
Β
- process.env.NODE_ENV λ λ Έλ νκ²½ μ 보λ₯Ό μ΄ν리μΌμ΄μ μΌλ‘ μ λ¬ ν μ μμ΅λλ€. app.js νμΌμμ console.log(process.env.NODE_ENV) λ‘ νμΈν΄ λ΄ μλ€.
Β
- νμ§λ§ process.env.NODE_ENV κ°μ μμ§ webpack.config.js μμλ μ¬μ©ν μ μμ΅λλ€. μ΄λ webpack5 λ²μ μΌλ‘ μ€λ©΄μ λ¬λΌμ§ μ μΌλ‘ 보μ λλ€.
Β
- μ΄μ체μ λ νλ«νΌμ μ’ μλμ§ μκ³ λμΌν λ°©λ²μΌλ‘ env λ³μλ₯Ό μ£Όμ ν΄μ£Όλ ν¨ν€μ§μΈ cross-env λ₯Ό μ€μΉν΄λ΄ μλ€.
npm install cross-env
** cross-env μ€μΉ μ£Όμ!! ** (https://www.boannews.com/media/view.asp?idx=56184&skind=O)
Β
Β
- μ€μΉκ° μλ£λλ©΄ μ΄μ λΉλν λ λͺ λ Ήμ΄λ₯Ό development μ production λκ°μ§ λͺ¨λλ₯Ό μ§μν μ μμ΅λλ€. package.json νμΌμ μμ ν΄λ΄ μλ€.
"build": "cross-env NODE_ENV=development webpack --progress", "build:pro": "cross-env NODE_ENV=production webpack --progress"
Β
- μ΄μ λΉλ μ λ κ°μ§ λͺ¨λλ‘ λΉλκ° κ°λ₯ν©λλ€. production λΉλ μ κ²°κ³Όλ¬Όμ΄ μ λ²λ€λ§ λλμ§ νμΈ ν΄λ΄ μλ€.
Β