Сейчас у меня вебпак сконфигурирован следующим образом:
- Я получаю бандл для js
- Получаю бандл для css
- В зависимости от того dev или prod версия я получаю файлы сжатые, с постфиксом min и с сорсмапами или нет.
Меня такое поведение не устраивает я хочу на выходе всегда получать четыре файла:
- bundle.min.js - сжатый бандл без сорсмапов
- bundle.js - не сжатый бандл с сорсмапами
- styles.min.css - сжатые стили без сорсмапов
- styles.css - не сжатые стили без сормапов.
Я думал просто одновременно запускать сборку и для prod, и для dev, но тут два минуса:
- Необходимость запускать две сборки одновременно.
- У меня есть клинер, который чистит директорию build. Выходит так, что одна из версий удаляется.
Мой конфиг вебпака:
const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const isDev = process.env.NODE_ENV === 'development';
module.exports = {
mode: process.env.NODE_ENV,
entry: './source/index.ts',
devtool: isDev && 'inline-source-map',
watch: true,
resolve: {
extensions: ['.ts', '.js']
},
output: {
filename: isDev ? 'bundle.js' : 'bundle.min.js',
path: path.resolve(__dirname, 'build')
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
},
{
test: /\.scss$/,
use: [
'style-loader',
{
loader: MiniCssExtractPlugin.loader,
options: {
hmr: isDev,
},
},
'css-loader',
'postcss-loader',
'sass-loader',
]
},
]
},
plugins: [
new CleanWebpackPlugin(),
new MiniCssExtractPlugin({
filename: isDev ? 'styles.css' : 'styles.min.css',
}),
]
}