96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
"use strict";
|
|
const path = require('path');
|
|
const fs = require('fs-extra-promise');
|
|
const webpack = require('webpack');
|
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
|
const WebpackOnBuildPlugin = require('on-build-webpack');
|
|
const devMode = process.env.NODE_ENV !== 'development'
|
|
const HappyPack = require('happypack');
|
|
const happyThreadPool = HappyPack.ThreadPool({size: 8});
|
|
|
|
module.exports = {
|
|
context: path.resolve(__dirname, 'src', 'client'),
|
|
mode: 'development',
|
|
entry: {
|
|
index: [
|
|
'webpack-hot-middleware/client?path=http://localhost:7700/__webpack_hmr&timeout=20000&reload=true',
|
|
'./index.js',
|
|
]
|
|
},
|
|
output: {
|
|
path: path.resolve(__dirname, 'public', 'static'),
|
|
publicPath: '/static/',
|
|
filename: "./bundle.js"
|
|
},
|
|
devtool: 'source-map',
|
|
node: {
|
|
console: true,
|
|
fs: 'empty',
|
|
net: 'empty',
|
|
tls: 'empty'
|
|
},
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.woff2?(\?v=\d+\.\d+\.\d+)?$/,
|
|
loader: "url-loader?limit=10000&mimetype=application/font-woff"
|
|
}, {
|
|
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
|
|
loader: "url-loader?limit=10000&mimetype=application/octet-stream"
|
|
}, {
|
|
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
|
|
loader: "file-loader"
|
|
}, {
|
|
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
|
|
loader: "url-loader?limit=10000&mimetype=image/svg+xml"
|
|
}, {
|
|
test: /\.jsx?$/,
|
|
exclude: /(node_modules|bower_components)/,
|
|
use: 'happypack/loader?id=jsx',
|
|
}, {
|
|
test: /\.css?$/,
|
|
use: 'happypack/loader?id=styles'
|
|
}, {
|
|
test: /\.scss?$/,
|
|
use: 'happypack/loader?id=styles'
|
|
}, {
|
|
test: /\.sass?$/,
|
|
use: 'happypack/loader?id=styles'
|
|
}, {
|
|
test: /\.(jpg|jpeg|png|gif)$/,
|
|
loaders: [
|
|
'url-loader?limit=10000&publicPath=static/' // Any png-image or woff-font below or equal to 10K will be converted to inline base64 instead
|
|
]
|
|
}, {
|
|
test: /\.md$/,
|
|
loaders: 'raw-loader'
|
|
}
|
|
]
|
|
},
|
|
plugins: [
|
|
new webpack.ProvidePlugin({
|
|
$: "jquery",
|
|
jQuery: "jquery"
|
|
}),
|
|
new webpack.HotModuleReplacementPlugin(),
|
|
new webpack.NoEmitOnErrorsPlugin(),
|
|
new webpack.DefinePlugin({'process.env': {'DEVELOPMENT': process.env.DEVELOPMENT}}),
|
|
new webpack.LoaderOptionsPlugin({debug: true}),
|
|
new MiniCssExtractPlugin(),
|
|
new HappyPack({
|
|
id: 'jsx',
|
|
threadPool: happyThreadPool,
|
|
loaders: ['babel-loader']
|
|
}),
|
|
new HappyPack({
|
|
id: 'styles',
|
|
threadPool: happyThreadPool,
|
|
loaders: ['style-loader', 'css-loader', 'sass-loader']
|
|
}),
|
|
new WebpackOnBuildPlugin(function (stats) {
|
|
let fileContent = fs.readFileSync('public/index.test.html', 'utf8');
|
|
fs.writeFileSync('public/index.html', fileContent);
|
|
})
|
|
]
|
|
};
|