Webpack - newlife-js/Wiki GitHub Wiki
- ์ฐธ๊ณ ์๋ฃ : ์บกํดํ๊ต ์นํฉ
NPM(Node Package Manager) : JS ์ธ์ด๋ฅผ ์ํ ํจํค์ง ๊ด๋ฆฌ์
https://www.npmjs.com/
library ๊ฐ์ ์์กด์ฑ, ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ฌ์(package.json์์)
package.json์ ์์ฑ
node_modules ํด๋ ์์ ์ค์น๋จ
์ ์ญ ์ค์น(--global) ์์๋ '%USERPROFILE%\AppData\Roaming\npm\node_modules' ์ ์ค์น๋จ
package.json์ dependencies๊ฐ ์
๋ ฅ๋จ
--save-dev(-D) -> package.json์ devDependencies๋ก ์
๋ ฅ๋จ
dependencies : ์ ํ๋ฆฌ์ผ์ด์
๋์์ ํ์ํ ๋ฐฐํฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(jquery, vue ๋ฑ)
devDependencides : ๊ฐ๋ฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(webpack ๋ฑ)
package.json์ ์์กด์ฑ ๋งบ์ ๋ชจ๋๋ค์ ์ค์นํด์ค
webpack : ํ๋ฐํธ์๋ ํ๋ ์์ํฌ์์ ๋ง์ด ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ (HTML, CSS, JS, image ๋ฑ์ ๋ณํฉ)
๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ์ฌ์ ์ปดํ์ผ๋ฌ
์ค์ต url
npm i webpack webpack-cli -D
script ์์ฑ ํ,
package.json์ ์๋๋ฅผ ์ถ๊ฐํ ํ npm run build
๋ก ๋น๋๋ฅผ ํ๋ฉด distํด๋์ main.js๊ฐ ์์ฑ๋จ
"scripts": {
"build": "webpack --mode=none"
}
npm run build๋ฅผ ์คํํ๋ฉด "build" : ์ ์๋ ๊ฒ๋ค์ด ์คํ๋๋ค๊ณ ๋ณด๋ฉด ๋จ
ํ๋ก์ ํธ ๋ฃจํธ ๋ ๋ฒจ์ webpack.config.js ํ์ผ์ ๋ง๋ค์ด์ entry, output ๋ฑ์ ์ต์
์ ์ค์ ํ ์ ์์
var path = require('path');
module.exports = {
mode: 'none', // none์ผ๋ก ํด์ผ main.js ํ์ผ์ ํด์ํ ์ ์์ -> ๋ฐฐํฌํ ๋ production์ผ๋ก
entry: './src/index.js',
output: { // webpack์ผ๋ก ๋ณํํ ๋น๋ ๊ฒฐ๊ณผ ํ์ผ
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
}
};
request ์๋ฅผ ์ค์ผ ์ ์์(๊ฐ๋ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง๋ค ๋ค ์์ฒญํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ)
๋ธ๋ผ์ฐ์ ๋ณ๋ก http ์์ฒญ ์ซ์๊ฐ ์ ํ๋์ด ์์(ํฌ๋กฌ: 6๊ฐ)
๊ฐ๋ฐ์๋๊ตฌ - Network์์ ํ์ธํ ์ ์์
gulpํ์ผ์ ๋ง๋ค์ด์ ๋๋ฆฌ๋ ์์
๋ค์ ์๋์ผ๋ก ํด์ค
webpack.config.js์ devtool: 'sourec-map'
์ถ๊ฐํด์ฃผ๋ฉด
๊ฐ๋ฐ์ ๋๊ตฌ์์ source๋ ๋ณํฉ๋๊ธฐ ์ ์๋ณธ ํ์ผ๋ค๋ก ๊ตฌ๋ถ๋์ด ์๋๊ฑธ ๋ณผ ์ ์์
entry, output, loader, plugin
๋น๋ํ๊ธฐ ์ํด ํ์ํ ์ต์ด ์ง์ ์
๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ผ ๊ฒฝ๋ก
https://webpack.js.org/loaders/
js๊ฐ ์๋ ์น ์์๋ค์ ๋ณํํ ์ ์๋๋ก ๋์์ฃผ๋ ์์ฑ
importํ ์น ์์์ ๋น๋ ํ์ผ์ ๋ฃ์ด์ค
use: loader์ ์์๋ ์ค๋ฅธ์ชฝ๋ถํฐ.. ์์๊ฐ ๋ฐ๋๋ฉด build๊ฐ ์๋จ
์) style-loader, css-loader
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
// style-loader : css style์ <head> ์์ inline์ผ๋ก ์ฝ์
// css-loader : cssํ์ผ์ importํ ์ ์๋๋ก ํจ
}
]
}
https://webpack.js.org/plugins/
์นํฉ์ ๊ธฐ๋ณธ์ ์ธ ๋์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณต
๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ํํ๋ฅผ ๋ฐ๊พธ๋ ์ญํ
var path = require('path');
var MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
mode: 'none',
entry: './index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.css$/,
use: [
{ loader: MiniCssExtractPlugin.loader },
"css-loader"
]
}
]
},
plugins: [
new MiniCssExtractPlugin()
// css๋ฅผ ํตํฉ๋ .cssํ์ผ๋ก extractํจ(main.css) -> index.html์ link ๊ฑธ์ด์ค์ผ ํจ
],
}
โป html-webpack-plugin tempale:์ ์ง์ ํ .html ํ์ผ์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ํฌํจํจ
์ฝ๋ ๋ณ๊ฒฝ์๋ง๋ค ๋น๋ ๋ช
๋ น์ด๋ฅผ ์คํํ์ง ์์๋, ์ ์ฅ๋ง ํ๋ฉด ์๋์ผ๋ก ๋น๋ํ๊ณ ์๋ก๊ณ ์นจ ํด์ค
๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ผ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋จ
"scripts": {
"dev": "webpack serve",
"build": "webpack"
}
npm run dev