spee.ch/webpack/webpack.server.config.js

88 lines
2.1 KiB
JavaScript

const Path = require('path');
const webpack = require('webpack');
const nodeExternals = require('webpack-node-externals');
const ExtractCssChunks = require('extract-css-chunks-webpack-plugin');
const createModuleAliases = require('../utils/createModuleAliases.js');
const SCSS_ROOT = Path.resolve(__dirname, '../client/scss/');
const CLIENT_ROOT = Path.resolve(__dirname, '../client/');
const CUSTOM_CLIENT_ROOT = Path.resolve(__dirname, '../site/custom/');
const customAliases = createModuleAliases();
module.exports = (env, argv) => {
const isDev = argv.mode === 'development';
return {
target: 'node',
//watch: isDev,
externals: [nodeExternals({
whitelist: ['webpack/hot/poll?1000'],
})],
// Set __dirname relative to current __dirname for node
context: Path.resolve(__dirname, '../'),
node: {
__dirname: true,
},
entry : [
...(isDev ? ['webpack/hot/poll?1000'] : []),
'@babel/polyfill',
'./server.js'
],
output: {
path : Path.resolve(__dirname, '../server/bundle'),
//publicPath: '/bundle/',
filename : 'server.js',
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
},
},
{
test: /\.scss$/,
use: [
{
loader: ExtractCssChunks.loader,
},
'css-loader',
'sass-loader',
]
},
{
test: /\.(png|jpg|gif|otf|ttf|svg)$/,
use : [
{
loader : 'url-loader',
options: {
limit: 8192,
name : '[name]-[hash].[ext]',
},
},
],
},
],
},
resolve: {
modules: [
CUSTOM_CLIENT_ROOT,
CLIENT_ROOT,
SCSS_ROOT,
'node_modules',
__dirname,
],
alias : customAliases,
extensions: ['.js', '.jsx', '.scss', '.json'],
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
]
};
}