1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const path = require("path");
|
4 | const _ = require("lodash");
|
5 | const webpack = require("webpack");
|
6 | const Config = require("webpack-chain");
|
7 | const webpack_merge_1 = require("webpack-merge");
|
8 | const babelConfig_1 = require("./config/babelConfig");
|
9 | const handleProgress_1 = require("./plugins/handleProgress");
|
10 | const handleProgressBar_1 = require("./plugins/handleProgressBar");
|
11 | const cacheConfig_1 = require("./config/cacheConfig");
|
12 | const utils_1 = require("./utils/utils");
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | function default_1(sweetConfig, sweetOptions) {
|
19 | const config = new Config();
|
20 | const sweetConfigCopy = _.isPlainObject(sweetConfig) ? _.omit({ ...sweetConfig }, [
|
21 | 'serverRender',
|
22 | 'serverEntry',
|
23 | 'serverOutput',
|
24 | 'serverExternals',
|
25 | 'serverDevtool',
|
26 | 'serverChainWebpack',
|
27 | 'hot'
|
28 | ]) : {};
|
29 | const { mode, dll, externals, resolve, chainWebpack, js, webpackLog = 'progress' } = sweetConfigCopy;
|
30 | const { ecmascript, targets: customTargets } = js !== null && js !== void 0 ? js : {};
|
31 | const isDevelopment = mode === 'development';
|
32 |
|
33 | config
|
34 | .merge({
|
35 | mode: 'development',
|
36 | devtool: isDevelopment ? 'inline-source-map' : false,
|
37 | resolve: { extensions: utils_1.extensions },
|
38 | target: ['web', ecmascript ? 'es2020' : 'es5'],
|
39 | performance: { hints: false }
|
40 | });
|
41 |
|
42 | config
|
43 | .output
|
44 | .path(path.join(sweetOptions.basicPath, cacheConfig_1.dllCache))
|
45 | .filename('[name].js')
|
46 | .library('[name]_[hash:5]')
|
47 | .libraryTarget('var')
|
48 | .globalObject('this');
|
49 |
|
50 | config
|
51 | .when(!ecmascript, (config) => {
|
52 | config
|
53 | .module
|
54 | .rule('dll')
|
55 | .use('babel-loader')
|
56 | .loader('babel-loader')
|
57 | .options({
|
58 | presets: [babelConfig_1.createPresetEnv(customTargets, false, true)],
|
59 | cacheDirectory: path.join(sweetOptions.basicPath, cacheConfig_1.babelCache),
|
60 | configFile: false,
|
61 | babelrc: false
|
62 | });
|
63 | });
|
64 |
|
65 | config
|
66 |
|
67 | .plugin('webpack.DllPlugin')
|
68 | .use(webpack.DllPlugin, [{
|
69 | path: path.join(sweetOptions.basicPath, cacheConfig_1.dllCache, 'manifest.json'),
|
70 | name: '[name]_[hash:5]'
|
71 | }])
|
72 | .end()
|
73 |
|
74 | .plugin('webpack.IgnorePlugin')
|
75 | .use(webpack.IgnorePlugin, [{
|
76 | resourceRegExp: /^\.\/locale$/,
|
77 | contextRegExp: /moment$/
|
78 | }])
|
79 | .end()
|
80 |
|
81 | .plugin('webpack.ProgressPlugin')
|
82 | .use(webpack.ProgressPlugin, [!webpackLog || webpackLog === 'progress' ? handleProgressBar_1.default(false) : handleProgress_1.handleDefaultProgress]);
|
83 |
|
84 | if (chainWebpack) {
|
85 | chainWebpack(config);
|
86 | }
|
87 | const mergeConfiguration = {
|
88 | entry: (dll === null || dll === void 0 ? void 0 : dll.length) ? { dll } : undefined,
|
89 | externals,
|
90 | resolve,
|
91 | experiments: {
|
92 | topLevelAwait: true
|
93 | }
|
94 | };
|
95 |
|
96 | return webpack_merge_1.merge(config.toConfig(), mergeConfiguration);
|
97 | }
|
98 | exports.default = default_1;
|