Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const path = require('path')
- const { CleanWebpackPlugin } = require('clean-webpack-plugin')
- const HTMLWebpackPlugin = require('html-webpack-plugin')
- const CopyPlugin = require('copy-webpack-plugin')
- const MiniCssExtractPlugin = require('mini-css-extract-plugin')
- const isProd = process.env.NODE_ENV === 'production'
- const isDev = !isProd
- const fileName = ext => isDev ? `bundle.${ext}` : `bundle.${ext}`
- module.exports = {
- context: path.resolve(__dirname, 'src'),
- mode: 'development',
- entry: ['@babel/polyfill', './index.js',],
- output: {
- filename: fileName('js'),
- path: path.resolve(__dirname, 'dist')
- },
- resolve: {
- extensions: ['.js'],
- alias: {
- '@': path.resolve(__dirname, 'src'),
- "@core": path.resolve(__dirname, 'src/core')
- }
- },
- devtool: isDev ? 'source-map' : false,
- devServer: {
- contentBase: path.join(__dirname, 'dist'),
- compress: true,
- port: 3000,
- hot: isDev
- },
- plugins: [
- new CleanWebpackPlugin(),
- new HTMLWebpackPlugin({
- template: 'index.html',
- minify: {
- removeComments: isProd,
- collapseWhitespace: isProd
- }
- }),
- new CopyPlugin({
- patterns: [
- {
- context: path.resolve(__dirname, 'src'),
- from: path.resolve(__dirname, 'src/favicon.ico'),
- to: path.resolve(__dirname, 'dist')
- }
- ]
- }),
- new MiniCssExtractPlugin({
- filename: fileName('css')
- })
- ],
- module: {
- rules: [
- {
- test: /\.s[ac]ss$/i,
- use: [
- MiniCssExtractPlugin.loader,
- 'css-loader',
- 'sass-loader',
- ],
- },
- {
- test: /\.m?js$/,
- exclude: /node_modules/,
- use: {
- loader: "babel-loader",
- options: {
- presets: ['@babel/preset-env']
- }
- }
- },
- ],
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement