// webpack.config.ts // Copyright (C) 2020 Dwayne Harris // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . import { resolve } from 'path' import { Configuration } from 'webpack' import HtmlWebpackPlugin from 'html-webpack-plugin' import MiniCssExtractPlugin from 'mini-css-extract-plugin' import postcssNormalize from 'postcss-normalize' import postcssPresetEnv from 'postcss-preset-env' const config: Configuration = { mode: 'development', devtool: 'eval-source-map', entry: { app: resolve(__dirname, './index.tsx'), }, output: { path: resolve(__dirname, '../../../../dist/apps/gif-app/'), filename: '[name].js', }, optimization: { splitChunks: { chunks: 'all', }, }, resolve: { extensions: ['.ts', '.tsx', '.js', '.png'], }, module: { rules: [ { test: /\.ts(x?)$/, exclude: /node_modules/, use: 'ts-loader', }, { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { importLoaders: 1, }, }, { loader: 'postcss-loader', options: { plugins: [ postcssNormalize(), postcssPresetEnv({ stage: 2, }), ] } } ], }, { test: /\.(jpe?g|gif|png|svg)$/, use: ['file-loader'], }, ], }, plugins: [ new HtmlWebpackPlugin({ title: 'GIF App', hash: true, template: resolve(__dirname, './index.ejs'), filename: 'composer.html', }), new MiniCssExtractPlugin({ filename: '[name].css', }), ], } export default config