1
1
// @ts -nocheck
2
2
3
- const fs = require ( 'fs' ) ;
4
- const path = require ( 'path' ) ;
5
3
const { exec } = require ( 'child_process' ) ;
6
- const { argv } = require ( 'yargs' ) ;
7
4
const { parse } = require ( 'url' ) ;
5
+ const { resolve } = require ( 'path' ) ;
6
+ const { readdirSync } = require ( 'fs' ) ;
8
7
8
+ const { argv } = require ( 'yargs' ) ;
9
9
const { ProvidePlugin } = require ( 'webpack' ) ;
10
- const ExtractTextPlugin = require ( 'extract-text-webpack-plugin' ) ;
11
10
const SpritesmithPlugin = require ( 'webpack-spritesmith' ) ;
12
11
const BrowserSyncPlugin = require ( 'browser-sync-webpack-plugin' ) ;
13
- const WebpackShellPlugin = require ( 'webpack-shell-plugin' ) ;
12
+ const WebpackShellPlugin = require ( 'webpack-shell-plugin-next ' ) ;
14
13
const CleanWebpackPlugin = require ( 'clean-webpack-plugin' ) ;
14
+ const MiniCssExtractPlugin = require ( 'mini-css-extract-plugin' ) ;
15
15
16
- const { url, server, NODE_ENV } = argv ;
16
+ const { url, server, mode } = argv ;
17
17
const sourceMap = {
18
- sourceMap : NODE_ENV === 'development'
18
+ sourceMap : mode === 'development'
19
19
} ;
20
20
21
21
if ( server ) {
@@ -24,22 +24,22 @@ if (server) {
24
24
25
25
const svgoConfig = {
26
26
plugins : [
27
- { cleanupAttrs : true } ,
28
- { removeDoctype : true } ,
29
- { removeXMLProcInst : true } ,
30
- { removeComments : true } ,
31
- { removeMetadata : true } ,
32
- { removeUselessDefs : true } ,
33
- { removeEditorsNSData : true } ,
34
- { removeEmptyAttrs : true } ,
35
- { removeHiddenElems : false } ,
36
- { removeEmptyText : true } ,
37
- { removeEmptyContainers : true } ,
38
- { cleanupEnableBackground : true } ,
39
- { removeViewBox : false } ,
40
- { cleanupIDs : false } ,
41
- { convertStyleToAttrs : true } ,
42
- { removeUselessStrokeAndFill : true }
27
+ { name : ' cleanupAttrs' , active : true } ,
28
+ { name : ' removeDoctype' , active : true } ,
29
+ { name : ' removeXMLProcInst' , active : true } ,
30
+ { name : ' removeComments' , active : true } ,
31
+ { name : ' removeMetadata' , active : true } ,
32
+ { name : ' removeUselessDefs' , active : true } ,
33
+ { name : ' removeEditorsNSData' , active : true } ,
34
+ { name : ' removeEmptyAttrs' , active : true } ,
35
+ { name : ' removeHiddenElems' , active : false } ,
36
+ { name : ' removeEmptyText' , active : true } ,
37
+ { name : ' removeEmptyContainers' , active : true } ,
38
+ { name : ' cleanupEnableBackground' , active : true } ,
39
+ { name : ' removeViewBox' , active : false } ,
40
+ { name : ' cleanupIDs' , active : false } ,
41
+ { name : ' convertStyleToAttrs' , active : true } ,
42
+ { name : ' removeUselessStrokeAndFill' , active : true }
43
43
]
44
44
} ;
45
45
@@ -124,18 +124,17 @@ const browserSyncConfig = {
124
124
} ;
125
125
126
126
const extractTextConfig = {
127
- filename : 'dist/app.css' ,
128
- allChunks : true
127
+ filename : 'dist/app.css'
129
128
} ;
130
129
131
130
const spritesmithConfig = {
132
131
src : {
133
- cwd : path . resolve ( __dirname , 'assets/images/sprite' ) ,
132
+ cwd : resolve ( __dirname , 'assets/images/sprite' ) ,
134
133
glob : '*.png'
135
134
} ,
136
135
target : {
137
- image : path . resolve ( __dirname , './assets/dist/sprite.png' ) ,
138
- css : path . resolve ( __dirname , './assets/styles/_sprite.css' )
136
+ image : resolve ( __dirname , './assets/dist/sprite.png' ) ,
137
+ css : resolve ( __dirname , './assets/styles/_sprite.css' )
139
138
} ,
140
139
apiOptions : {
141
140
cssImageRef : '../dist/sprite.png'
@@ -150,16 +149,16 @@ const cleanConfig = {
150
149
} ;
151
150
152
151
const shellScripts = [ ] ;
153
- const svgs = fs . readdirSync ( './assets/images/svg' ) . filter ( svg => svg [ 0 ] !== '.' ) ;
152
+ const svgs = readdirSync ( './assets/images/svg' ) . filter ( svg => svg [ 0 ] !== '.' ) ;
154
153
155
154
if ( svgs . length ) {
156
155
shellScripts . push ( 'svgo -f assets/images/svg --config=' + JSON . stringify ( svgoConfig ) ) ;
157
156
shellScripts . push ( 'spritesh -q -i assets/images/svg -o ./assets/dist/sprite.svg -p svg-' ) ;
158
157
}
159
158
160
159
module . exports = ( ) => {
161
- const isDevelopment = NODE_ENV === 'development' ;
162
- const isProduction = NODE_ENV === 'production' ;
160
+ const isDevelopment = mode === 'development' ;
161
+ const isProduction = mode === 'production' ;
163
162
164
163
if ( isProduction ) {
165
164
postcssOptions . plugins . push ( require ( 'postcss-merge-rules' ) , require ( 'cssnano' ) ( ) ) ;
@@ -175,10 +174,10 @@ module.exports = () => {
175
174
}
176
175
177
176
const config = {
178
- mode : NODE_ENV ,
177
+ mode : mode ,
179
178
entry : [ './assets/styles/main.css' , './assets/scripts/main.js' ] ,
180
179
output : {
181
- path : path . resolve ( __dirname , './assets' ) ,
180
+ path : resolve ( __dirname , './assets' ) ,
182
181
filename : 'dist/app.js'
183
182
} ,
184
183
resolve : {
@@ -188,18 +187,19 @@ module.exports = () => {
188
187
rules : [
189
188
{
190
189
test : / \. ( s a | s c | c ) s s $ / ,
191
- use : ExtractTextPlugin . extract ( {
192
- use : [
193
- {
194
- loader : 'css-loader' ,
195
- options : sourceMap
196
- } ,
197
- {
198
- loader : 'postcss-loader' ,
199
- options : { postcssOptions }
200
- }
201
- ]
202
- } )
190
+ use : [
191
+ {
192
+ loader : MiniCssExtractPlugin . loader
193
+ } ,
194
+ {
195
+ loader : 'css-loader' ,
196
+ options : sourceMap
197
+ } ,
198
+ {
199
+ loader : 'postcss-loader' ,
200
+ options : { postcssOptions }
201
+ }
202
+ ]
203
203
} ,
204
204
{
205
205
test : / \. j s $ / ,
@@ -228,11 +228,13 @@ module.exports = () => {
228
228
jQuery : 'jquery' ,
229
229
'window.jQuery' : 'jquery'
230
230
} ) ,
231
- new ExtractTextPlugin ( extractTextConfig ) ,
231
+ new MiniCssExtractPlugin ( extractTextConfig ) ,
232
232
new SpritesmithPlugin ( spritesmithConfig ) ,
233
233
new CleanWebpackPlugin ( [ '../assets/dist/' ] , cleanConfig ) ,
234
234
new WebpackShellPlugin ( {
235
- onBuildStart : shellScripts
235
+ onBuildStart : {
236
+ scripts : shellScripts
237
+ }
236
238
} )
237
239
] ,
238
240
externals : {
0 commit comments