1- const path = require ( 'path' ) ;
2- const fs = require ( 'fs' ) ;
3-
4- const webpack = require ( 'webpack' ) ;
5- const HtmlWebpackPlugin = require ( 'html-webpack-plugin' ) ;
6- const CordovaHtmlOutputPlugin = require ( './webpack/plugins/CordovaHtmlOutputPlugin.js' ) ;
7- const UglifyJsPlugin = require ( 'uglifyjs-webpack-plugin' ) ;
8- const CleanPlugin = require ( 'clean-webpack-plugin' ) ;
9- const ExtractTextPlugin = require ( "extract-text-webpack-plugin" ) ;
10- const VueLoaderPlugin = require ( 'vue-loader/lib/plugin' ) ;
11-
12- const entryFile = path . join ( __dirname , 'src/main.js' ) ;
13- const devServerPort = 8081 ;
14-
15- let config = function ( env ) {
16- let returner = {
17- entry : entryFile ,
18- mode : ( env && typeof env . release !== 'undefined' && env . release ) ? "production" : "development" ,
19-
20- resolve : {
21- extensions : [ '.js' , '.json' , '.vue' ] ,
22- modules : [ path . join ( __dirname , 'src' ) , 'node_modules' ] ,
23- alias : {
24- 'vue$' : 'vue/dist/vue.common.js' ,
25- 'src' : path . resolve ( __dirname , 'src/' ) ,
26- 'assets' : path . resolve ( __dirname , 'src/assets/' ) ,
27- 'pages' : path . resolve ( __dirname , 'src/assets/vue/pages/' ) ,
28- 'components' : path . resolve ( __dirname , 'src/assets/vue/components/' )
29- }
30- } ,
31-
32- output : {
33- pathinfo : true ,
34- devtoolLineToLine : true ,
35- filename : '[hash].[name].js' ,
36- sourceMapFilename : "[hash].[name].js.map" ,
37- path : path . join ( __dirname , 'www' )
38- } ,
39-
40- module : {
41- rules : [
42- {
43- test : / \. ( p n g | j p e ? g | g i f ) $ / ,
44- loader : 'file-loader' ,
45- options : { name : '[name].[ext]?[hash]' }
46- } ,
47- {
48- test : / \. ( w o f f 2 ? | e o t | t t f | o t f | m p 3 | w a v ) ( \? .* ) ? $ / ,
49- loader : 'file-loader' ,
50- options : { name : '[name].[ext]?[hash]' }
51- } ,
52- {
53- test : / \. s v g $ / ,
54- loader : 'url-loader'
55- } ,
56- {
57- test : / \. s c s s $ / ,
58- loader : [ 'vue-style-loader' , 'css-loader' , 'sass-loader' ]
59- } ,
60- {
61- test : / \. s a s s $ / ,
62- loader : [ 'vue-style-loader' , 'css-loader' , 'sass-loader?indentedSyntax' ]
63- } ,
64- {
65- test : / \. v u e $ / ,
66- exclude : / n o d e _ m o d u l e s / ,
67- loader : 'vue-loader' ,
68- options : {
69- loaders : {
70- js : {
71- loader : 'babel-loader' ,
72- options : {
73- presets : [ 'env' ] ,
74- plugins : [ 'transform-object-rest-spread' ]
75- }
76- }
77- }
78- }
79- } ,
80- {
81- test : / \. j s $ / ,
82- exclude : / n o d e _ m o d u l e s ( \/ | \\ ) (? ! ( f r a m e w o r k 7 | f r a m e w o r k 7 - v u e | t e m p l a t e 7 | d o m 7 ) ( \/ | \\ ) ) .* / ,
83- use : {
84- loader : 'babel-loader' ,
85- options : {
86- presets : [ 'env' ] ,
87- plugins : [ 'transform-runtime' , 'transform-object-rest-spread' ]
88- }
89- }
90- }
91- ]
92- } ,
93-
94- plugins : [
95- new webpack . DefinePlugin ( {
96- 'process.env' : {
97- 'NODE_ENV' : JSON . stringify ( ( env && typeof env !== "undefined" && env . release ) ? 'production' : 'development' )
98- }
99- } ) ,
100- new HtmlWebpackPlugin ( {
101- filename : 'index.html' ,
102- template : 'src/index.ejs' ,
103- platform : process . argv . length > 5 ? process . argv [ 5 ] . replace ( / [ - ] / g, '' ) : "" ,
104- inject : true ,
105- minify : {
106- removeComments : true ,
107- removeScriptTypeAttributes : true ,
108- removeAttributeQuotes : true ,
109- useShortDoctype : true ,
110- decodeEntities : true ,
111- collapseWhitespace : true ,
112- minifyCSS : true
113- }
114- } ) ,
115- new VueLoaderPlugin ( )
116- ]
117- }
118-
1+ module . exports = function ( env ) {
1192 if ( typeof env === 'undefined' || typeof env . devserver === 'undefined' ) {
120- returner . plugins . push ( new CordovaHtmlOutputPlugin ( ) )
121- returner . plugins . push ( new ExtractTextPlugin ( "styles.css" ) )
122- returner . module . rules . push ( {
123- test : / \. c s s $ / , use : ExtractTextPlugin . extract ( {
124- fallback : "style-loader" ,
125- use : "css-loader"
126- } )
127- } )
128- }
129-
130- if ( env ) {
131- if ( typeof env . devserver !== 'undefined' && env . devserver ) {
132- returner . module . rules . push ( {
133- test : / \. c s s $ / , loader : [ 'style-loader' , 'css-loader' ]
134- } )
135- returner . entry = [
136- entryFile ,
137- ]
138- returner . output . publicPath = "/"
139- returner . devtool = "eval"
140- returner . devServer = {
141- contentBase : path . join ( __dirname , "www" ) ,
142- port : devServerPort ,
143- stats : { colors : true } ,
144- watchOptions : {
145- aggregateTimeout : 300 ,
146- poll : 100 ,
147- ignored : / n o d e _ m o d u l e s | p l a t f o r m s / ,
148- } ,
149- headers : {
150- "Access-Control-Allow-Origin" : "*"
151- } ,
152- host : "0.0.0.0"
153- }
154- returner . plugins . push ( new webpack . NamedModulesPlugin ( ) )
155- } else if ( typeof env . release !== 'undefined' && env . release ) {
156- returner . plugins . push ( new CleanPlugin ( "www" , {
157- root : path . join ( __dirname , "." ) ,
158- dry : false ,
159- verbose : false ,
160- exclude : [ "index.html" ]
161- } ) )
162- returner . plugins . push ( new UglifyJsPlugin ( ) )
163- }
3+ return require ( './webpack.config.dev' ) ;
4+ } else if ( typeof env . devserver !== 'undefined' && env . devserver ) {
5+ return require ( './webpack.config.server' ) ;
6+ } else if ( typeof env . release !== 'undefined' && env . release ) {
7+ return require ( './webpack.config.release' ) ;
1648 }
165-
166- return returner
167- }
168-
169- module . exports = config
9+ }
0 commit comments