2018-04-05 19:13:32 +00:00
|
|
|
var path = require('path');
|
2018-04-13 18:47:39 +00:00
|
|
|
var MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
2018-11-04 06:22:46 +00:00
|
|
|
var postcssPresetEnv = require('postcss-preset-env');
|
2018-04-13 18:47:39 +00:00
|
|
|
var cssnano = require('cssnano');
|
2018-11-04 06:22:46 +00:00
|
|
|
var TerserPlugin = require('terser-webpack-plugin');
|
|
|
|
var ManifestPlugin = require('webpack-manifest-plugin');
|
2018-11-06 10:13:32 +00:00
|
|
|
var { InjectManifest } = require('workbox-webpack-plugin');
|
2015-12-28 23:34:32 +00:00
|
|
|
|
|
|
|
module.exports = {
|
2018-03-25 00:34:41 +00:00
|
|
|
mode: 'production',
|
2018-11-06 10:13:32 +00:00
|
|
|
entry: {
|
|
|
|
main: './src/js/index',
|
|
|
|
boot: './src/js/boot'
|
|
|
|
},
|
2015-12-28 23:34:32 +00:00
|
|
|
output: {
|
2018-11-04 06:22:46 +00:00
|
|
|
filename: '[name].[chunkhash:8].js',
|
|
|
|
chunkFilename: '[name].[chunkhash:8].js'
|
2015-12-28 23:34:32 +00:00
|
|
|
},
|
2018-04-05 19:13:32 +00:00
|
|
|
resolve: {
|
|
|
|
alias: {
|
|
|
|
components: path.resolve(__dirname, 'src/js/components'),
|
|
|
|
containers: path.resolve(__dirname, 'src/js/containers'),
|
|
|
|
state: path.resolve(__dirname, 'src/js/state'),
|
|
|
|
utils: path.resolve(__dirname, 'src/js/utils')
|
|
|
|
}
|
|
|
|
},
|
2015-12-28 23:34:32 +00:00
|
|
|
module: {
|
2017-02-16 02:55:50 +00:00
|
|
|
rules: [
|
2018-04-05 23:46:22 +00:00
|
|
|
{
|
|
|
|
test: /\.js$/,
|
|
|
|
loader: 'eslint-loader',
|
|
|
|
exclude: /node_modules/,
|
|
|
|
enforce: 'pre',
|
|
|
|
options: {
|
|
|
|
fix: true
|
|
|
|
}
|
|
|
|
},
|
2018-11-04 06:22:46 +00:00
|
|
|
{
|
|
|
|
test: /\.js$/,
|
|
|
|
loader: 'babel-loader',
|
|
|
|
exclude: /node_modules/
|
|
|
|
},
|
2018-04-13 18:47:39 +00:00
|
|
|
{
|
|
|
|
test: /\.css$/,
|
|
|
|
use: [
|
|
|
|
MiniCssExtractPlugin.loader,
|
|
|
|
{
|
|
|
|
loader: 'css-loader',
|
|
|
|
options: {
|
|
|
|
modules: false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
loader: 'postcss-loader',
|
|
|
|
options: {
|
2018-11-04 06:22:46 +00:00
|
|
|
ident: 'postcss',
|
2018-04-13 18:47:39 +00:00
|
|
|
plugins: [
|
2018-05-05 19:54:00 +00:00
|
|
|
require('postcss-flexbugs-fixes'),
|
2018-11-04 06:22:46 +00:00
|
|
|
postcssPresetEnv({
|
|
|
|
autoprefixer: {
|
|
|
|
flexbox: 'no-2009'
|
|
|
|
}
|
2018-05-05 19:54:00 +00:00
|
|
|
}),
|
2018-04-13 18:47:39 +00:00
|
|
|
cssnano({
|
|
|
|
discardUnused: {
|
|
|
|
fontFace: false
|
|
|
|
}
|
|
|
|
})
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
2015-12-28 23:34:32 +00:00
|
|
|
]
|
2018-04-13 18:47:39 +00:00
|
|
|
},
|
|
|
|
plugins: [
|
|
|
|
new MiniCssExtractPlugin({
|
2018-11-04 06:22:46 +00:00
|
|
|
filename: '[name].[contenthash:8].css',
|
|
|
|
chunkFilename: '[name].[contenthash:8].css'
|
|
|
|
}),
|
|
|
|
new ManifestPlugin({
|
|
|
|
fileName: 'asset-manifest.json'
|
2018-11-06 10:13:32 +00:00
|
|
|
}),
|
|
|
|
new InjectManifest({
|
|
|
|
swSrc: './src/js/sw.js',
|
|
|
|
globDirectory: './src',
|
|
|
|
globPatterns: ['font/*.woff2']
|
2018-04-13 18:47:39 +00:00
|
|
|
})
|
|
|
|
],
|
|
|
|
optimization: {
|
2018-11-04 06:22:46 +00:00
|
|
|
minimizer: [new TerserPlugin()],
|
2018-04-13 18:47:39 +00:00
|
|
|
splitChunks: {
|
2018-11-04 06:22:46 +00:00
|
|
|
chunks: 'all',
|
2018-04-13 18:47:39 +00:00
|
|
|
cacheGroups: {
|
|
|
|
styles: {
|
|
|
|
test: /\.css$/,
|
|
|
|
chunks: 'all'
|
|
|
|
}
|
|
|
|
}
|
2018-11-04 06:22:46 +00:00
|
|
|
},
|
2018-11-06 10:13:32 +00:00
|
|
|
runtimeChunk: 'single'
|
2018-04-05 19:13:32 +00:00
|
|
|
}
|
2015-12-28 23:34:32 +00:00
|
|
|
};
|