1 | const
|
2 | createChain = require('./create-chain'),
|
3 | log = require('../helpers/logger')('app:webpack'),
|
4 | extensionRunner = require('../app-extension/extensions-runner')
|
5 |
|
6 | async function getWebpackConfig (chain, cfg, {
|
7 | name,
|
8 | hot,
|
9 | cfgExtendBase = cfg.build,
|
10 | hookSuffix = '',
|
11 | invokeParams
|
12 | }) {
|
13 | await extensionRunner.runHook('chainWebpack' + hookSuffix, async hook => {
|
14 | log(`Extension(${hook.api.extId}): Chaining ${name ? name + ' ' : ''}Webpack config`)
|
15 | await hook.fn(chain, invokeParams, hook.api)
|
16 | })
|
17 |
|
18 | if (typeof cfgExtendBase.chainWebpack === 'function') {
|
19 | log(`Chaining ${name ? name + ' ' : ''}Webpack config`)
|
20 | await cfgExtendBase.chainWebpack(chain, invokeParams)
|
21 | }
|
22 |
|
23 | const webpackConfig = chain.toConfig()
|
24 |
|
25 | await extensionRunner.runHook('extendWebpack' + hookSuffix, async hook => {
|
26 | log(`Extension(${hook.api.extId}): Extending ${name ? name + ' ' : ''}Webpack config`)
|
27 | await hook.fn(webpackConfig, invokeParams, hook.api)
|
28 | })
|
29 |
|
30 | if (typeof cfgExtendBase.extendWebpack === 'function') {
|
31 | log(`Extending ${name ? name + ' ' : ''}Webpack config`)
|
32 | await cfgExtendBase.extendWebpack(webpackConfig, invokeParams)
|
33 | }
|
34 |
|
35 | if (hot && cfg.ctx.dev && cfg.devServer.hot) {
|
36 |
|
37 | require('webpack-dev-server').addDevServerEntrypoints(webpackConfig, cfg.devServer)
|
38 | }
|
39 |
|
40 | return webpackConfig
|
41 | }
|
42 |
|
43 | async function getSPA (cfg) {
|
44 | const chain = createChain(cfg, 'SPA')
|
45 | require('./spa')(chain, cfg)
|
46 | return await getWebpackConfig(chain, cfg, {
|
47 | name: 'SPA',
|
48 | hot: true,
|
49 | invokeParams: { isClient: true, isServer: false }
|
50 | })
|
51 | }
|
52 |
|
53 | async function getPWA (cfg) {
|
54 | const chain = createChain(cfg, 'PWA')
|
55 | require('./spa')(chain, cfg)
|
56 | require('./pwa')(chain, cfg)
|
57 | return await getWebpackConfig(chain, cfg, {
|
58 | name: 'PWA',
|
59 | hot: true,
|
60 | invokeParams: { isClient: true, isServer: false }
|
61 | })
|
62 | }
|
63 |
|
64 | async function getCordova (cfg) {
|
65 | const chain = createChain(cfg, 'Cordova')
|
66 | require('./cordova')(chain, cfg)
|
67 | return await getWebpackConfig(chain, cfg, {
|
68 | name: 'Cordova',
|
69 | hot: true,
|
70 | invokeParams: { isClient: true, isServer: false }
|
71 | })
|
72 | }
|
73 |
|
74 | async function getElectron (cfg) {
|
75 | const
|
76 | rendererChain = createChain(cfg, 'Renderer process'),
|
77 | mainChain = require('./electron/main')(cfg, 'Main process')
|
78 |
|
79 | require('./electron/renderer')(rendererChain, cfg)
|
80 |
|
81 | return {
|
82 | renderer: await getWebpackConfig(rendererChain, cfg, {
|
83 | name: 'Renderer process',
|
84 | hot: true,
|
85 | invokeParams: { isClient: true, isServer: false }
|
86 | }),
|
87 | main: await getWebpackConfig(mainChain, cfg, {
|
88 | name: 'Main process',
|
89 | cfgExtendBase: cfg.electron,
|
90 | hookSuffix: 'MainElectronProcess'
|
91 | })
|
92 | }
|
93 | }
|
94 |
|
95 | async function getSSR (cfg) {
|
96 | const
|
97 | client = createChain(cfg, 'Client'),
|
98 | server = createChain(cfg, 'Server')
|
99 |
|
100 | require('./ssr/client')(client, cfg)
|
101 | if (cfg.ctx.mode.pwa) {
|
102 | require('./pwa')(client, cfg)
|
103 | }
|
104 |
|
105 | require('./ssr/server')(server, cfg)
|
106 |
|
107 | return {
|
108 | client: await getWebpackConfig(client, cfg, {
|
109 | name: 'Client',
|
110 | hot: true,
|
111 | invokeParams: { isClient: true, isServer: false }
|
112 | }),
|
113 | server: await getWebpackConfig(server, cfg, {
|
114 | name: 'Server',
|
115 | invokeParams: { isClient: false, isServer: true }
|
116 | })
|
117 | }
|
118 | }
|
119 |
|
120 | module.exports = async function (cfg) {
|
121 | const mode = cfg.ctx.mode
|
122 |
|
123 | if (mode.ssr) {
|
124 | return await getSSR(cfg)
|
125 | }
|
126 | else if (mode.electron) {
|
127 | return await getElectron(cfg)
|
128 | }
|
129 | else if (mode.cordova) {
|
130 | return await getCordova(cfg)
|
131 | }
|
132 | else if (mode.pwa) {
|
133 | return await getPWA(cfg)
|
134 | }
|
135 | else {
|
136 | return await getSPA(cfg)
|
137 | }
|
138 | }
|