UNPKG

2.92 kBJavaScriptView Raw
1const 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
34const 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
51const ssr = {
52 entry: 'js/index-server.js',
53 sourceMap: true,
54};
55
56const 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
67function 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 // append / to the end of publicUrl, webpack outputs wrong urls otherwise
79 if (!finalConfig.publicUrl.endsWith('/')) {
80 finalConfig.publicUrl += '/';
81 }
82
83 // dev server config needs to be merged separately
84 finalConfig.devServer = Object.assign({}, devServer, config.devServer);
85
86 // replace appPort in proxy config
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 // save open as openBrowser, as open will get changed
97 finalConfig.openBrowser = finalConfig.devServer.open;
98
99 // ssr
100 if (config.ssr) {
101 let ssrConfig = config.ssr;
102 if (ssrConfig === true) {
103 ssrConfig = ssr;
104 }
105
106 // ssr config needs to be merged separately
107 finalConfig.ssr = Object.assign({}, ssr, ssrConfig);
108 finalConfig.hasSSR = true;
109 }
110
111 return finalConfig;
112}
113
114function 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
133module.exports = {
134 getConfig,
135 getRollupConfig,
136};