const ExtractTextPlugin = require('extract-text-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const autoprefixer = require('autoprefixer'); const config = require('./config'); const entry = { baserow: config.entry, }; /** * Array of resolve modules entry and file extension to prevent ESLint errors. */ const resolve = { modules: [config.entry, 'node_modules'], extensions: ['*', '.js', '.json'], }; const modules = { rules: [ { test: /\.js$/, exclude: /node_modules/, use: [ { loader: 'babel-loader?cacheDirectory', options: { presets: ['@babel/preset-env'], }, }, { loader: 'eslint-loader', }, ], }, { test: /\.css$/, exclude: /node_modules/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: [ { loader: 'css-loader', options: { sourceMap: config.sourceMaps, }, }, { loader: 'postcss-loader', options: { ident: 'postcss', plugins: () => [ autoprefixer({ browsers: ['last 5 versions'], }), ], sourceMap: 'inline', }, }, ], }), }, { test: /\.(woff|woff2|eot|ttf|svg|ico|jpg|jpeg|png)$/, loader: 'url-loader?limit=10000', }, { test: /\.scss$/, exclude: /node_modules/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: [ { loader: 'css-loader', options: { sourceMap: config.sourceMaps, }, }, { loader: 'postcss-loader', options: { ident: 'postcss', plugins: () => [ autoprefixer({ browsers: ['last 5 versions'], }), ], sourceMap: 'inline', }, }, { loader: 'sass-loader', options: { sourceMap: config.sourceMaps, }, }, ], }), }, { test: /\.html$/, exclude: /node_modules/, loader: 'raw-loader', }, ], }; const plugins = [ new CleanWebpackPlugin([config.dist], { allowExternal: true, }), new ExtractTextPlugin(config.cssFilename), new HtmlWebpackPlugin({ template: `${config.output}/index.html`, filename: 'index.html' }), new HtmlWebpackPlugin({ template: `${config.output}/login.html`, filename: 'login.html' }) ]; const webpackConfig = { entry, resolve, module: modules, plugins, }; module.exports = webpackConfig;