npm i -D webpack webpack-cli webpack-dev-server
// webpack.config.js
const path = require('path')
module.exports = {
resolve: {
extensions: ['.js', '.ts'],
alias: {
'@': path.resolve(__dirname, 'src'),
'@components': path.resolve(__dirname, 'src/components'),
}
}
}
extensions
: 생략하고 싶은 확장자 명시alias
: 경로 별칭을 지정 (절대적인 위치에서 찾을 수 있는 장점)// webpack.config.js
module.exports = {
entry: './src/main.js'
}
const path = require('path')
module.exports = {
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
clean: true
}
}
path
: 결과물을 반환할 경로filename
: 결과물의 이름clean
: build 시, dist 폴더를 모두 지움// webpack.config.js
module.exports = {
module: {
rules: [
test: /\.css$/,
use: 'css-loader'
]
}
}
test
: 해당 파일의 확장자를 찾음use
// webpack.config.js
const CopyPlugin = require('copy-webpack-plugin')
module.exports = {
plugins: [
new CopyPlugin({
patterns: [
{ from: 'static', to: 'dist' }
]
})
]
}
webpack-dev-server
npm i -D webpack-dev-server
// package.json
scripts: {
dev: 'webpack-dev-server --mode development'
}
devServer의 옵션이 바뀌는 경우, 재실행 필요
// webpack.config.js
moudle.exports = {
devServer: {
port: 1234
}
}
port
: 개발서버의 포트번호 (기본값: 8080 )
html-webpack-plugin
npm i -D html-webpack-plugin
// webpack.config.js
const HtmlPlugin = require('html-webpack-plugin')
module.exports = {
plugins: [
new HtmlPlugin({
template: './src/index.html'
})
]
}
template
: 웹팩이 해석해야하는 파일이 어디 있는지 명시css-loader
npm i -D css-loader
// webpack.config.js
module.exports = {
module: {
rules: [
test: /\.css$/,
use: 'css-loader'
]
}
}
sass-loader
npm i -D css-loader sass sass-loader
// webpack.config.js
module.exports = {
module: {
rules: [
test: /\.s?css$/,
use: [
'css-loader',
'sass-loader'
]
]
}
}
copy-webpack-plugin
npm i -D copy-webpack-plugin
// webpack.config.js
const CopyPlugin = require('copy-webpack-plugin')
module.exports = {
plugins: [
new CopyPlugin({
patterns: [
{ from: 'static', to: 'dist' }
]
})
]
}
patterns
: from에서 to로 파일을 복사 (to는 output으로 자동으로 명시되어 있음)tsconfig-paths-webpack-plugin
npm i -D tsconfig-paths-webpack-plugin
// webpack.config.js
const path = require("path")
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin')
const tsConfigPath = path.resolve(__dirname, "./tsconfig.json")
module.exports = {
resolve: {
extensions: ['.ts', '.js'],
plugins:[
new TsconfigPathsPlugin({
configFile: tsConfigPath
})
]
},
}
MiniCssExtractPlugin
npm i -D MiniCssExtractPlugin
// webpack.config.js
const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
entry: './src/main.ts',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'js/bundle.[contenthash].js',
clean: true
},
module: {
{
test: /\.s[ac]ss$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
exclude: /node_modules/
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: 'assets/css/style.[contenthash].css',
})
]
}
css-loader
style-loader
sass-loader
와우,, 정리하는 겸 보러왔는데 더 배워갑니다🙌🏻