const CopyWebpackPlugin = require('copy-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const path = require('path'); // PostCss const autoprefixer = require('autoprefixer'); const postcssVars = require('postcss-simple-vars'); const routes = require('./src/routes.json'); const TemplateConfig = require('./src/template-config.js'); // Prepare all entry points const entry = { // common: [ // // Vendor // 'react', // 'react-dom' // ] }; routes.forEach(route => { if (!route.redirect) { entry[route.name] = `./src/views/${route.name}/${route.name}.jsx`; } }); module.exports = { entry: entry, output: { path: path.resolve(__dirname, 'build'), filename: 'js/[name].bundle.js' }, module: { rules: [{ test: /\.jsx?$/, loader: 'babel-loader', include: path.resolve(__dirname, 'src'), options: { plugins: ['transform-object-rest-spread'], presets: ['es2015', 'react'] } }, { test: /\.css$/, use: [{ loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'postcss-loader', options: { ident: 'postcss', plugins: function () { return [ postcssVars, autoprefixer({ browsers: ['last 3 versions', 'Safari >= 8', 'iOS >= 8'] }) ]; } } }] }, { test: /\.scss$/, use: [{ loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'sass-loader' }] }, { test: /\.(png|jpg|gif|eot|svg|ttf|woff)$/i, loader: 'url-loader' }, { test: /\.html$/, loader: 'html-loader' }, { test: /\.less$/, use: [ 'style-loader', 'css-loader', 'less-loader' ] } ] }, plugins: [ new CopyWebpackPlugin([{ from: 'static' }]) ].concat(routes .filter(route => !route.redirect) .map(route => new HtmlWebpackPlugin(Object.assign({}, TemplateConfig, { title: route.title, filename: `${route.name}.html`, route: route }))) ) };