UNPKG

3.56 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const path = require("path");
4const _ = require("lodash");
5const webpack = require("webpack");
6const Config = require("webpack-chain");
7const webpack_merge_1 = require("webpack-merge");
8const babelConfig_1 = require("./config/babelConfig");
9const handleProgress_1 = require("./plugins/handleProgress");
10const handleProgressBar_1 = require("./plugins/handleProgressBar");
11const cacheConfig_1 = require("./config/cacheConfig");
12const utils_1 = require("./utils/utils");
13/**
14 * webpack dll扩展配置
15 * @param { SweetConfig | null | undefined } sweetConfig: 获取到的外部配置
16 * @param { SweetOptions } sweetOptions: 内部挂载的一些配置
17 */
18function 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 // babel
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 // plugin
65 config
66 // dll
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 // moment
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 /* chainWebpack: 通过webpack-chain的API扩展或修改webpack配置 */
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 /* @ts-ignore 合并自定义配置 */
96 return webpack_merge_1.merge(config.toConfig(), mergeConfiguration);
97}
98exports.default = default_1;