1 | import { Webpack, WebpackDevServer } from '@berun/fluent-webpack'
|
2 |
|
3 | import Berun from '@berun/berun'
|
4 | import presetCoreWebpack from './runner-core'
|
5 | import presetResolveWebpack from './runner-resolve'
|
6 | import presetDevServer from './runner-devserver'
|
7 | import * as taskDev from './tasks/task-dev'
|
8 |
|
9 | import * as taskProd from './tasks/task-prod'
|
10 |
|
11 | import {
|
12 | ruleParser,
|
13 | ruleMjs,
|
14 | ruleMainImage,
|
15 | ruleMainCompile,
|
16 | ruleMainStatic,
|
17 | ruleMainSvg
|
18 | } from './runner-rule'
|
19 |
|
20 | import {
|
21 | pluginHtml,
|
22 | pluginInterpolateHtml,
|
23 | pluginProgressBar,
|
24 | pluginModuleNotFound,
|
25 | pluginEnv,
|
26 | pluginPackageInfo,
|
27 | pluginHot,
|
28 | pluginCaseSensitivePaths,
|
29 | pluginWatchMissingNodeModules,
|
30 | pluginMoment,
|
31 | pluginManifest,
|
32 | pluginWorkbox,
|
33 | pluginForkTsChecker
|
34 | } from './runner-plugin'
|
35 |
|
36 | import { optimization, terser } from './runner-optimization'
|
37 |
|
38 | const {
|
39 | taskDevBuildPreFlightArgs,
|
40 | taskDevBuildPreFlightChecks,
|
41 | taskDevBuildGetPort,
|
42 | taskDevBuildCompile
|
43 | } = taskDev
|
44 |
|
45 | const {
|
46 | taskBuildPreFlightArgs,
|
47 | taskBuildPreFlightMeasure,
|
48 | taskBuildPreFlightClean,
|
49 | taskBuildPreFlightChecks,
|
50 | taskBuildCopyPublicAssets,
|
51 | taskBuildCompile,
|
52 | taskBuildPostFlightFileSizes,
|
53 | taskBuildPostFlightInstructions
|
54 | } = taskProd
|
55 |
|
56 | type BerunFunc = (berun: Berun) => void
|
57 |
|
58 | interface BerunWebpack {
|
59 | (): BerunFunc
|
60 | taskDev: BerunFunc
|
61 | taskProd: BerunFunc
|
62 | taskDevBuildPreFlightArgs: BerunFunc
|
63 | taskDevBuildPreFlightChecks: BerunFunc
|
64 | taskDevBuildGetPort: BerunFunc
|
65 | taskDevBuildCompile: BerunFunc
|
66 | taskBuildPreFlightArgs: BerunFunc
|
67 | taskBuildPreFlightChecks: BerunFunc
|
68 | taskBuildPreFlightMeasure: BerunFunc
|
69 | taskBuildPreFlightClean: BerunFunc
|
70 | taskBuildCopyPublicAssets: BerunFunc
|
71 | taskBuildCompile: BerunFunc
|
72 | taskBuildPostFlightFileSizes: BerunFunc
|
73 | taskBuildPostFlightInstructions: BerunFunc
|
74 | ruleMjs: BerunFunc
|
75 | ruleParser: BerunFunc
|
76 | ruleMainImage: BerunFunc
|
77 | ruleMainCompile: BerunFunc
|
78 | ruleMainStatic: BerunFunc
|
79 | ruleMainSvg: BerunFunc
|
80 | pluginHtml: BerunFunc
|
81 | pluginInterpolateHtml: BerunFunc
|
82 | pluginProgressBar: BerunFunc
|
83 | pluginModuleNotFound: BerunFunc
|
84 | pluginEnv: BerunFunc
|
85 | pluginPackageInfo: BerunFunc
|
86 | pluginHot: BerunFunc
|
87 | pluginCaseSensitivePaths: BerunFunc
|
88 | pluginWatchMissingNodeModules: BerunFunc
|
89 | pluginMoment: BerunFunc
|
90 | pluginManifest: BerunFunc
|
91 | pluginWorkbox: BerunFunc
|
92 | pluginForkTsChecker: BerunFunc
|
93 | terser: BerunFunc
|
94 | }
|
95 |
|
96 | const webpack: BerunWebpack = Object.assign(
|
97 | ((berun: Berun) => {
|
98 | const ISPRODUCTION = process.env.NODE_ENV === 'production'
|
99 |
|
100 | berun
|
101 | .use(Webpack)
|
102 | .when(!ISPRODUCTION, b => b.use(WebpackDevServer))
|
103 | .when(!ISPRODUCTION, b => b.use(presetDevServer))
|
104 | .use(presetCoreWebpack)
|
105 | .use(presetResolveWebpack)
|
106 | .use(optimization)
|
107 |
|
108 | const _webpackOldToConfig = berun.webpack.toConfig
|
109 | berun.webpack.toConfig = (...rest) => {
|
110 | berun.babel.set('cacheDirectory', true)
|
111 | berun.babel.set('cacheCompression', ISPRODUCTION)
|
112 | berun.babel.set('compact', ISPRODUCTION)
|
113 |
|
114 | const main = berun.webpack.module.rule('main')
|
115 |
|
116 | if (main.oneOfs.has('compile')) {
|
117 | main
|
118 | .oneOf('compile')
|
119 | .use('babel')
|
120 | .options(berun.babel.toConfig())
|
121 | }
|
122 |
|
123 | if (berun.webpack.module.rules.has('lint')) {
|
124 | berun.webpack.module
|
125 | .rule('lint')
|
126 | .use('eslint')
|
127 | .options(berun.eslint.toConfig())
|
128 | }
|
129 |
|
130 | return _webpackOldToConfig.call(berun.webpack, ...rest)
|
131 | }
|
132 | }) as any,
|
133 | {
|
134 | taskDev,
|
135 | taskProd,
|
136 | taskDevBuildPreFlightArgs,
|
137 | taskDevBuildPreFlightChecks,
|
138 | taskDevBuildGetPort,
|
139 | taskDevBuildCompile,
|
140 | taskBuildPreFlightArgs,
|
141 | taskBuildPreFlightChecks,
|
142 | taskBuildPreFlightMeasure,
|
143 | taskBuildPreFlightClean,
|
144 | taskBuildCopyPublicAssets,
|
145 | taskBuildCompile,
|
146 | taskBuildPostFlightFileSizes,
|
147 | taskBuildPostFlightInstructions,
|
148 | ruleMjs,
|
149 | ruleParser,
|
150 | ruleMainImage,
|
151 | ruleMainCompile,
|
152 | ruleMainStatic,
|
153 | ruleMainSvg,
|
154 | pluginHtml,
|
155 | pluginInterpolateHtml,
|
156 | pluginProgressBar,
|
157 | pluginModuleNotFound,
|
158 | pluginEnv,
|
159 | pluginPackageInfo,
|
160 | pluginHot,
|
161 | pluginCaseSensitivePaths,
|
162 | pluginWatchMissingNodeModules,
|
163 | pluginMoment,
|
164 | pluginManifest,
|
165 | pluginWorkbox,
|
166 | pluginForkTsChecker,
|
167 | terser
|
168 | }
|
169 | )
|
170 |
|
171 | export default webpack
|