webpack, webpack-cli devDependencies 로 설치
src에 client/js/main.js파일 만들기.
webpack.config.js파일 만들기
webpack.config.js에 들어가는 코드들은 옛날 문법으로 써줘야함.
entry: 우리가 처리하고자 하는 파일의 경로
mode: 개발단계이면 development 완성단계이면 production
output: 결과물
filename: 이 프로퍼티에 우리 결과물이 될 파일 이름 입력
path: 이 프로퍼티에 우리 결과물 파일을 어디에 저장할 지 지정 (이 경로는 절대경로(전체경로)여야함!)
rules: 우리가 각각의 파일 종류에 따라 어떤 전환을 할 건지 결정하는 것
- 여러개의 rules가 있을 수 있으니 배열로 만들어 준다.
- test: 어떤 파일을 변환시킬 건지 (이 강이에서는 모든 js파일을 변환시킨다는 코드임)
- use: 어떤 loader을 통해서 변환 시킬 건지 (이강의에서는 babel-loader을 사용)
- babel-loader을 사용하기 위해서 npm i babel-loader을 해 주어야함.
- 정리: babel-loader을 이용해서 js파일들을 변경한다는 것임.
const path = require("path");
module.exports = {
entry: "./src/client/js/main.js",
mode: "development",
output: {
filename: "main.js",
path: path.resolve(__dirname, "assets", "js"),
},
module: {
rules: [
{
test: /\.js$/,
use: {
loader: "babel-loader",
options: {
presets: [["@babel/preset-env", { targets: "defaults" }]],
},
},
},
],
},
};
브라우저에서 assets파일을 읽을 수 있게 처리해주기
pug에 script써주기
webpack.config.js 실행시키기
밑의 코드로 인해 npm run assets하면 webpack을 실행 시킬 수 있다.
실행시키면 assets/js/main.js파일이 만들어짐 → 우리가 쓴 코드들을 변환시킨 코드가 들어가짐
"assets": "webpack --config webpack.config.js"
scss를 css로 변환 시키기
loader은 적힌 반대 순서대로 실행됨.
{
test: /\.scss$/,
use: ["style-loader", "css-loader", "sass-loader"],
},
MiniCssExtractPlugin을 사용해서 js와 css파일 분리하기
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const path = require("path");
module.exports = {
entry: "./src/client/js/main.js",
mode: "development",
plugins: [
new MiniCssExtractPlugin({
filename: "css/styles.css",
}),
],
output: {
filename: "js/main.js",
path: path.resolve(__dirname, "assets"),
},
module: {
rules: [
{
test: /\.js$/,
use: {
loader: "babel-loader",
options: {
presets: [["@babel/preset-env", { targets: "defaults" }]],
},
},
},
{
test: /\.scss$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
},
],
},
};
webpack을 돌릴려면 계속 npm run assets해야하는 수고를 더는법
watch: true → 초기 빌드 후 webpack은 해결된 파일의 변경 사항을 계속 감시한다.
clean: true →빌드에서 생성된 파일만 표시되고 더 이상 이전 파일은 표시되지 않는다.
module.exports = {
entry: "./src/client/js/main.js",
mode: "development",
watch: true,
plugins: [
new MiniCssExtractPlugin({
filename: "css/styles.css",
}),
],
output: {
filename: "js/main.js",
path: path.resolve(__dirname, "assets"),
clean: true,
},
webpack과 관련된 파일을 저장할때 서버를 재시동하는 것을 방지하는 법
ignore → ignore에 설정한 파일들은 무시한다는뜻
exec → 감지되었을 때 수행할 명령
{
"ignore": ["webpack.config.js", "src/client/*", "assets/*"],
"exec": "babel-node src/init.js"
}
nodemon/webpack 둘다 실행될때 해당json파일을 찾아서 실행시키므로 다음과 같이 간략하게 표현 할 수 있다.
"scripts": {
"dev:server": "nodemon",
"dev:assets": "webpack"
},