UNPKG

4.26 kBPlain TextView Raw
1import { Webpack, WebpackDevServer } from '@berun/fluent-webpack'
2
3import Berun from '@berun/berun'
4import presetCoreWebpack from './runner-core'
5import presetResolveWebpack from './runner-resolve'
6import presetDevServer from './runner-devserver'
7import * as taskDev from './tasks/task-dev'
8
9import * as taskProd from './tasks/task-prod'
10
11import {
12 ruleParser,
13 ruleMjs,
14 ruleMainImage,
15 ruleMainCompile,
16 ruleMainStatic,
17 ruleMainSvg
18} from './runner-rule'
19
20import {
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
36import { optimization, terser } from './runner-optimization'
37
38const {
39 taskDevBuildPreFlightArgs,
40 taskDevBuildPreFlightChecks,
41 taskDevBuildGetPort,
42 taskDevBuildCompile
43} = taskDev
44
45const {
46 taskBuildPreFlightArgs,
47 taskBuildPreFlightMeasure,
48 taskBuildPreFlightClean,
49 taskBuildPreFlightChecks,
50 taskBuildCopyPublicAssets,
51 taskBuildCompile,
52 taskBuildPostFlightFileSizes,
53 taskBuildPostFlightInstructions
54} = taskProd
55
56type BerunFunc = (berun: Berun) => void
57
58interface 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
96const 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
171export default webpack