diff options
Diffstat (limited to 'webpack.config.js')
-rw-r--r-- | webpack.config.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..8057ec15 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,74 @@ +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const StyleLintPlugin = require('stylelint-webpack-plugin'); +const TerserPlugin = require('terser-webpack-plugin'); +const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); + +module.exports = (env, argv) => { + const dev = argv.mode !== 'production'; + const config = { + devtool: dev ? 'source-map' : false, + entry: { + 'scripts': [ + 'core-js/modules/es6.promise', + 'whatwg-fetch', + __dirname + '/src/main/assets/scripts.js', + require.resolve('evil-icons/assets/evil-icons.js') + ], + 'style': [ + __dirname + '/src/main/assets/style.css', + require.resolve('evil-icons/assets/evil-icons.css') + ] + }, + output: { + path: __dirname + '/src/main/resources/static', + filename: '[name].js' + }, + module: { + rules: [ + { test: /\.jsx?$/, loader: 'eslint-loader', enforce: 'pre', exclude: /node_modules/, options: { failOnWarning: false, failOnError: true, fix: true } }, + { test: /\.js$/, loader: 'babel-loader' }, + { + test: /\.css$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: 'css-loader' + }, + { + loader: 'postcss-loader', options: { + plugins: () => [ + require('autoprefixer')({}) + ] + } + } + ] + }, + { test: /\.png$/, loader: 'url-loader?limit=10000000000' }, + { test: /\.svg$/, loader: 'url-loader?limit=10000000000' } + ] + }, + plugins: [ + new StyleLintPlugin({ configFile: '.stylelintrc.json', context: 'src/main/assets', files: ['**/*.css'], emitErrors: false }), + new MiniCssExtractPlugin({ filename: 'style.css', allChunks: true }) + ], + }; + if (!dev) { + config.optimization = { + minimizer: [ + new TerserPlugin({ + cache: true, + parallel: true, + sourceMap: dev, + terserOptions: { + output: { + comments: /@license/i + } + }, + extractComments: true + }), + new OptimizeCSSAssetsPlugin({}) + ] + }; + } + return config; +}; |