1 | const configWebpack = {
|
2 | sourcePath: 'res',
|
3 | destPath: 'static/dist/dev',
|
4 | publicUrl: '/static/dist/dev',
|
5 | sourceMap: true,
|
6 | eslint: true,
|
7 | entry: {
|
8 | app: 'js/index.js',
|
9 | },
|
10 | entryHtml: 'index.html',
|
11 | appendHash: true,
|
12 | library: false,
|
13 | minify: false,
|
14 | quiet: true,
|
15 | babel: {},
|
16 | analyzeBundle: false,
|
17 | ssr: false,
|
18 | cwd: process.cwd(),
|
19 | cssModules: false,
|
20 | devServer: {},
|
21 |
|
22 | $env_production: {
|
23 | sourceMap: false,
|
24 | eslint: false,
|
25 | destPath: 'static/dist',
|
26 | publicUrl: '/static/dist',
|
27 | minify: true,
|
28 | analyzeBundle: true,
|
29 | },
|
30 |
|
31 | $env_development: {},
|
32 | };
|
33 |
|
34 | const devServer = {
|
35 | host: '0.0.0.0',
|
36 | wwwHost: 'localhost',
|
37 | port: 3001,
|
38 | https: false,
|
39 | open: true,
|
40 | appPort: 3000,
|
41 | appHost: 'localhost',
|
42 | proxy: {
|
43 | '/api': 'http://localhost:<appPort>',
|
44 | '/static': 'http://localhost:<appPort>',
|
45 | '/uploads': 'http://localhost:<appPort>',
|
46 | },
|
47 | notifyOnError: true,
|
48 | buildSSR: true,
|
49 | };
|
50 |
|
51 | const ssr = {
|
52 | entry: 'js/index-server.js',
|
53 | sourceMap: true,
|
54 | };
|
55 |
|
56 | const configRollup = {
|
57 | entry: 'src/index.js',
|
58 | dest: 'dist/index.js',
|
59 | library: 'lib',
|
60 | libraryFormat: 'umd',
|
61 | minify: false,
|
62 | sourceMap: false,
|
63 | $env_production: {},
|
64 | $env_development: {},
|
65 | };
|
66 |
|
67 | function getConfig(config, env) {
|
68 | const envKey = (env === 'production') ? 'production' : 'development';
|
69 | const finalConfig = Object.assign({},
|
70 | configWebpack,
|
71 | configWebpack[`$env_${envKey}`],
|
72 | config,
|
73 | config[`$env_${envKey}`],
|
74 | );
|
75 |
|
76 | finalConfig.isProduction = (env === 'production');
|
77 |
|
78 |
|
79 | if (!finalConfig.publicUrl.endsWith('/')) {
|
80 | finalConfig.publicUrl += '/';
|
81 | }
|
82 |
|
83 |
|
84 | finalConfig.devServer = Object.assign({}, devServer, config.devServer);
|
85 |
|
86 |
|
87 | const appPort = finalConfig.devServer.appPort;
|
88 | const proxy = finalConfig.devServer.proxy;
|
89 | Object.keys(proxy).forEach((item) => {
|
90 | const val = proxy[item];
|
91 | if (typeof val === 'string') {
|
92 | proxy[item] = val.replace('<appPort>', appPort);
|
93 | }
|
94 | });
|
95 |
|
96 |
|
97 | finalConfig.openBrowser = finalConfig.devServer.open;
|
98 |
|
99 |
|
100 | if (config.ssr) {
|
101 | let ssrConfig = config.ssr;
|
102 | if (ssrConfig === true) {
|
103 | ssrConfig = ssr;
|
104 | }
|
105 |
|
106 |
|
107 | finalConfig.ssr = Object.assign({}, ssr, ssrConfig);
|
108 | finalConfig.hasSSR = true;
|
109 | }
|
110 |
|
111 | return finalConfig;
|
112 | }
|
113 |
|
114 | function getRollupConfig(config, env) {
|
115 | const envKey = (env === 'production') ? 'production' : 'development';
|
116 | const finalConfig = Object.assign({},
|
117 | configRollup,
|
118 | configRollup[`$env_${envKey}`],
|
119 | config,
|
120 | config[`$env_${envKey}`],
|
121 | );
|
122 |
|
123 | finalConfig.isProduction = (env === 'production');
|
124 | if (finalConfig.isProduction) {
|
125 | Object.assign(finalConfig, finalConfig.$env_production);
|
126 | }
|
127 | else {
|
128 | Object.assign(finalConfig, finalConfig.$env_development);
|
129 | }
|
130 | return finalConfig;
|
131 | }
|
132 |
|
133 | module.exports = {
|
134 | getConfig,
|
135 | getRollupConfig,
|
136 | };
|