JSFiddle - React, Tailwind, and code Playground
by sicely
JavaScript
const path = require('path')
const HTMLWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
.BundleAnalyzerPlugin
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const isDev = process.env.NODE_ENV === 'development'
const isProd = !isDev
const filename = ext => (isDev ? `[name].${ext}` : `[name].[hash].${ext}`)
const cssLoaders = extra => {
const loaders = [
{
loader: MiniCssExtractPlugin.loader,
options: {
hmr: isDev,
reloadAll: true,
},
},
'css-loader',
]
if (extra) {
loaders.push(extra)
}
return loaders
}
const babelOptions = preset => {
const options = {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties'],
}
if (preset) options.presets.push(preset)
return options
}
const jsLoaders = () => {
const loaders = [
{
loader: 'babel-loader',
options: babelOptions(),
},
]
if (isDev) {
loaders.push('eslint-loader')
}
return loaders
}
const optimization = () => {
//generate optimization objects
const config = {
splitChunks: {
chunks: 'all', //optimization code(no reply), vendors is common between files
},
}
if (isProd) {
config.minimizer = [
new OptimizeCssAssetsPlugin({
assetNameRegExp: /\.css$/g,
cssProcessor: require('cssnano'),
cssProcessorPluginOptions: {
preset: [
'default',
...