1 |
|
2 |
|
3 |
|
4 | const webpack = require('webpack');
|
5 | const merge = require('webpack-merge');
|
6 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
|
7 | const FileManagerPlugin = require('filemanager-webpack-plugin');
|
8 | const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
9 | const cssProcessor = require('cssnano');
|
10 | const { BUNDLE_NAME, IS_PROD, IS_POS } = require('./helpers/consts.js');
|
11 | const MambaManifestPlugin = require('./plugins/MambaManifestPlugin.js');
|
12 |
|
13 | module.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 |
|
43 | IS_PROD && new webpack.HashedModuleIdsPlugin(),
|
44 | ].filter(Boolean),
|
45 | optimization: {
|
46 | minimize: IS_PROD,
|
47 | minimizer: [
|
48 |
|
49 | new OptimizeCSSAssetsPlugin({
|
50 |
|
51 | cssProcessor,
|
52 | cssProcessorOptions: {
|
53 | core: IS_PROD,
|
54 | discardComments: IS_PROD,
|
55 | autoprefixer: false,
|
56 | },
|
57 | }),
|
58 |
|
59 | new UglifyJsPlugin({
|
60 | cache: true,
|
61 | parallel: true,
|
62 | sourceMap: true,
|
63 | uglifyOptions: {
|
64 | compress: {
|
65 | reduce_funcs: false,
|
66 | keep_fnames: false,
|
67 |
|
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 |
|
80 | reserved: ['process'],
|
81 | },
|
82 | output: {
|
83 | comments: false,
|
84 | },
|
85 | },
|
86 | }),
|
87 | ],
|
88 | },
|
89 | });
|