npm init -ynpm i -D webpack webpack-cli webpack-dev-server@nextwebpack-cli 와 메이저 버전을 일치시켜 주어야 하기 때문에 webpack-dev-server뒤에 @next를 붙입니다."scripts": {
"dev": "webpack-dev-server --mode development",
"build": "webpack --mode production"
},를 추가합니다.index.html과 js폴더를 생성합니다.webpack.config.js파일을 최상위에 생성합니다.webpack.config.js는 브라우저에서 동작하는 것이 아니라 node.js환경에서 동작합니다.
// import
const path = require('path');
// export
module.exports = {
// 파일을 읽어들이기 시작하는 진입점 설정
//webpack은 js파일을 진입점으로 사용합니다.
entry: './js/main.js',
// 결과물(번들)을 반환하는 설정
// path에는 node.js에서 필요로하는 절대경로가 필요합니다.
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js',
clean: true
}
}
path 라는 모듈은 node.js에서 기본적으로 제공하는 전역 모듈입니다.__dirname node.js에서 사용할 수 있는 전역변수입니다. 현재 파일이 있는 그 경로를 지칭합니다.path.resolve()첫번째 인수와 두번째 인수의 경로를 함쳐주는 역할을 합니다. 이 두 경로를 함쳐서 절대적인 경로를 반환합니다.filename: 'main.js' main.js라는 이름으로 번들을 만듭니다.clean: true는 매번 build할 때마다 빌드폴더 안의 기존의 빌드 내용을 전부 삭제하고 새롭게 만듭니다.(작업하던 js파일 이름을 바꾸게 됐을 때 유용합니다.)
npm run build를 입력하여 성공적으로 build 됐는지 dist폴더와 내용을 확인합니다.
build를 하면 지금은 main.js만 build됐는데요,
index.html을 삽입해서 개발서버를 열어 줄 수 있습니다.
npm i -D html-webpack-plugin
이제 이 패키지를 첨부하여 어디에서 실행할 것인지 명시를 해주어야 합니다.
webpack.config.js 파일에
const HtmlPlugin = require('html-webpack-plugin');
// 번들링 후 결과물의 처리 방식 등 다양한 플러그인들을 설정
plugins: [
new HtmlPlugin({
template: "./index.html",
}),
],
를 추가합니다.
webpack은 entry에 있는 파일을 output 결과물로 만드는 과정에서 plugins에 명시되어져 있는 plugin들을 활용하게 됩니다. 그 때, 우리가 방금 작성한 HtmlPlugin 을 통해서 template으로 만들어 놓은 index.html을 main.js와 병합된 합본을 dist라는 폴더에 만들어주는 역할을 합니다.

npm run dev로 서버를 열때 http://[::]:8080 으로 제대로 localhost가 표시되지 않을 때에는 webpack.config.js 에 devServer 옵션을 추가합니다.
devServer: {
host: 'localhost'
}
copy-webpack-plugin은 build시에 설정한 폴더 이름의 파일 안에 있는 내용을 그대로 복사 하여 dist폴더 안으로 넣어줍니다.
npm i -D copy-webpack-plugin 을 설치합니다.
webpack.config.js 에 옵션을 추가합니다.
const CopyPlugin = require("copy-webpack-plugin");
new CopyPlugin({
patterns: [
{from: 'static'}
]
})
npm run build 명령어로 잘 동작하는지 확인합니다.main.js 에 import로 추가합니다.
import css from '../css/main.css';
css 변수를 활용하지 않기 때문에 css from 은 생략가능합니다.
import '../css/main.css';
build하면 webpack bundler는 import한 파일들을 전부 main.js 파일 하나로 합쳐 줍니다.
하지만 webpack 자체로는 css파일을 읽을수가 없습니다. 단지 하나로 합치기만 할 뿐입니다. 그래서 css파일을 읽을 수 있는 외부 패키지를 설치해야 합니다.

webpack 자체로는 css파일을 읽을수가 없습니다. 단지 하나로 합치기만 할 뿐입니다. 그래서 css파일을 읽을 수 있는 외부 패키지를 설치해야 합니다.
npm i -D css-loader style-loader
webpack.config.js 을 설정해 줍니다.
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
}
]
}
module 옵션의 순서는 상관없습니다.style-loader와 css-loader의 순서는 중요합니다. 먼저 해석되는 loader는 css-loader 입니다.css-loader를 사용합니다. 이렇게 해석된 내용을 style-loader가 html의 style태그에 해석된 내용을 삽입해줍니다.module: {
rules: [
{
test: /\.s?css$/,
use: ["style-loader", "css-loader"],
},
],
},
npm i -D sass-loader sasssass-loader : webpack에서 sass 파일을 읽어낼 수 있게 합니다.sass : 읽을 때, 문법을 해석해 줄 수 있는 실제 sass 모듈입니다.webpack.config.js 을 설정해 줍니다.
순서가 중요합니다!
module: {
rules: [
{
test: /\.s?css$/,
use: [
"style-loader",
"css-loader",
"sass-loader"
],
},
],
},
npm i -D postcss autoprefixer postcss-loaderwebpack.config.js 을 설정해 줍니다. module: {
rules: [
{
test: /\.s?css$/,
use: [
"style-loader",
"css-loader",
"postcss-loader",
"sass-loader"
],
},
],
},webpack.config.js 에 browserslist를 설정합니다. "browserslist": [
"> 1%",
"last 2 versions"
].postcssrc.js파일을 최상위 루트에 만들고 내용을 작성합니다.module.exports = {
plugins: [require("autoprefixer")],
};module.exports 는 node.js에서 동작합니다.autoprefixer를 require()로 가지고 와서 연결해줍니다.style-loader로 style에 추가하고 있으니 index.html의 아래 내용은 더이상 필요하지 않습니다.
<link rel="stylesheet" href="./css/main.css" />
총3개의 패키지를 설치합니다. (추가로 나중에 1개의 모듈을 더 설치해줍니다.)
npm i -D @babel/core @babel/preset-env @babel/plugin-transform-runtime
.babelrc.js 파일을 생성하고, 아래 내용을 작성합니다.
module.exports = {
presets: ['@babel/preset-env'],
plugins: [
['@babel/plugin-transform-runtime']
]
}
@babel/preset-env : 일일이 명시해주어야하는 js기능을 한번에 지원해줍니다.@babel/plugin-transform-runtime : 비동기처리를 위해서 설치합니다.webpack.config.js 의 module에 내용을 추가합니다.
module: {
rules: [
{
test: /\.s?css$/,
use: ["style-loader", "css-loader", "postcss-loader", "sass-loader"],
},
{
test: /\.js$/,
use: ['babel-loader']
}
],
},
1개의 모듈을 설치해줍니다.
npm i -D babel-loader
npx 명령어를 사용하면 설치하지 않고도 degit을 사용할 수 있습니다.
github에 있는 원격의 저장소를 현재의 경로에 다운로드 받을 수 있는 기능을 제공합니다.
npx degit {저장소 이름} {다운로드받을 폴더 이름}degit을 이용하면 버전내역이 없는 새 프로젝트로 다운로드하여 시작할 수 있습니다.Download ZIP으로 다운로드 하여 사용합니다.