bukopin-redemption-client-r.../webpack.config.js

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);
})
]
};