UNPKG

2.65 kBJavaScriptView Raw
1/**
2 * Webpack configuration for building bundles
3 */
4const webpack = require('webpack');
5const merge = require('webpack-merge');
6const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
7const FileManagerPlugin = require('filemanager-webpack-plugin');
8const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
9const cssProcessor = require('cssnano');
10const { BUNDLE_NAME, IS_PROD, IS_POS } = require('./helpers/consts.js');
11const MambaManifestPlugin = require('./plugins/MambaManifestPlugin.js');
12
13module.exports = merge(require('./config.base.js'), {
14 devtool: false,
15 plugins: [
16 IS_POS && new MambaManifestPlugin(),
17 new FileManagerPlugin({
18 onStart: {
19 delete: [`./dist/${BUNDLE_NAME}`, `./dist/${BUNDLE_NAME}.tar.gz`],
20 },
21 onEnd: {
22 copy: [
23 {
24 source: './src/assets',
25 destination: `./dist/${BUNDLE_NAME}/assets`,
26 },
27 ],
28 archive: [
29 {
30 source: `./dist/${BUNDLE_NAME}/`,
31 destination: `./dist/${BUNDLE_NAME}.tar.gz`,
32 format: 'tar',
33 options: {
34 gzip: true,
35 gzipOptions: { level: 1 },
36 globOptions: { nomount: true },
37 },
38 },
39 ],
40 },
41 }),
42 /** Generate hashes based on module's relative path */
43 IS_PROD && new webpack.HashedModuleIdsPlugin(),
44 ].filter(Boolean),
45 optimization: {
46 minimize: IS_PROD,
47 minimizer: [
48 /** Minify the bundle's css */
49 new OptimizeCSSAssetsPlugin({
50 /** Default css processor is 'cssnano' */
51 cssProcessor,
52 cssProcessorOptions: {
53 core: IS_PROD,
54 discardComments: IS_PROD,
55 autoprefixer: false,
56 },
57 }),
58 /** Minify the bundle's js */
59 new UglifyJsPlugin({
60 cache: true, // Enables file caching
61 parallel: true, // Use multiple CPUs if available,
62 sourceMap: true, // Enables sourcemap
63 uglifyOptions: {
64 compress: {
65 reduce_funcs: false,
66 keep_fnames: false,
67 /** Functions that doesn't have side-effects */
68 pure_funcs: [
69 'classCallCheck',
70 '_classCallCheck',
71 '_possibleConstructorReturn',
72 'Object.freeze',
73 'invariant',
74 'warning',
75 ],
76 },
77 mangle: {
78 keep_fnames: false,
79 /** Prevent renaming of `process.env...` */
80 reserved: ['process'],
81 },
82 output: {
83 comments: false,
84 },
85 },
86 }),
87 ],
88 },
89});