@@ -5,121 +5,122 @@ const { VueLoaderPlugin } = require('vue-loader');
5
5
const ESLintPlugin = require ( 'eslint-webpack-plugin' ) ;
6
6
const CopyWebpackPlugin = require ( 'copy-webpack-plugin' ) ;
7
7
8
- module . exports = {
9
- performance : {
10
- // 资源文件最大限制大小warning提示 1000kb
11
- maxAssetSize : 1000 * 1024 ,
12
- maxEntrypointSize : 1000 * 1024 ,
13
- } ,
14
- output : {
15
- filename : '[name].[chunkhash].js' ,
16
- chunkFilename : '[name].[chunkhash].js' ,
17
- path : path . resolve ( __dirname , '../dist' ) ,
18
- publicPath : '' ,
19
- } ,
20
- module : {
21
- rules : [
22
- {
23
- test : / \. v u e $ / ,
24
- loader : 'vue-loader'
25
- } ,
26
- {
27
- test : / \. m ? j s $ / ,
28
- loader : 'babel-loader' ,
29
- exclude : file => {
30
- return / n o d e _ m o d u l e s / . test ( file )
31
- }
32
- } ,
33
- {
34
- test : / \. s ? c s s $ / i,
35
- use : [
36
- {
37
- loader : MiniCssExtractPlugin . loader ,
38
- options : {
39
- publicPath : '../'
40
- }
41
- } ,
42
- {
43
- loader : "css-loader" ,
44
- options : { importLoaders : 1 } ,
45
- } ,
46
- {
47
- loader : "postcss-loader" ,
48
- options : {
49
- postcssOptions : {
50
- plugins : [
51
- [
52
- "autoprefixer" ,
53
- {
54
- // Options
55
- } ,
8
+ module . exports = platform => {
9
+ return {
10
+ performance : {
11
+ // 资源文件最大限制大小warning提示 1000kb
12
+ maxAssetSize : 1000 * 1024 ,
13
+ maxEntrypointSize : 1000 * 1024 ,
14
+ } ,
15
+ output : {
16
+ filename : '[name].[chunkhash].js' ,
17
+ chunkFilename : '[name].[chunkhash].js' ,
18
+ path : path . resolve ( __dirname , '../dist' ) ,
19
+ publicPath : '' ,
20
+ } ,
21
+ module : {
22
+ rules : [
23
+ {
24
+ test : / \. v u e $ / ,
25
+ loader : 'vue-loader' ,
26
+ options : {
27
+ extractCSS : true
28
+ }
29
+ } ,
30
+ {
31
+ test : / \. m ? j s $ / ,
32
+ loader : 'babel-loader' ,
33
+ exclude : file => {
34
+ return / n o d e _ m o d u l e s / . test ( file )
35
+ }
36
+ } ,
37
+ {
38
+ test : / \. s ? c s s $ / i,
39
+ use : [
40
+ platform == 'server' ? {
41
+ loader : 'null-loader'
42
+ } : {
43
+ loader : MiniCssExtractPlugin . loader ,
44
+ options : {
45
+ publicPath : '../'
46
+ }
47
+ } ,
48
+ {
49
+ loader : "css-loader" ,
50
+ options : { importLoaders : 1 } ,
51
+ } ,
52
+ {
53
+ loader : "postcss-loader" ,
54
+ options : {
55
+ postcssOptions : {
56
+ plugins : [
57
+ [
58
+ "autoprefixer" ,
59
+ {
60
+ // Options
61
+ } ,
62
+ ] ,
56
63
] ,
57
- ] ,
64
+ } ,
58
65
} ,
59
66
} ,
67
+ 'sass-loader'
68
+ ] ,
69
+ } ,
70
+ {
71
+ test : / \. ( p n g | s v g | j p g | j p e g | g i f | w e b p ) $ / i,
72
+ // asset 自动地在 asset/resource 和 asset/inline 之间进行选择, 默认size < 8kb 实行asset/inline
73
+ type : 'asset' ,
74
+ parser : {
75
+ dataUrlCondition : {
76
+ maxSize : 4 * 1024 // 4kb
77
+ }
78
+ } ,
79
+ generator : {
80
+ filename : 'images/[name].[hash][ext]' ,
60
81
} ,
61
- 'sass-loader'
62
- ] ,
63
- } ,
64
- {
65
- test : / \. ( p n g | s v g | j p g | j p e g | g i f | w e b p ) $ / i,
66
- // asset 自动地在 asset/resource 和 asset/inline 之间进行选择, 默认size < 8kb 实行asset/inline
67
- type : 'asset' ,
68
- parser : {
69
- dataUrlCondition : {
70
- maxSize : 4 * 1024 // 4kb
71
- }
72
82
} ,
73
- generator : {
74
- filename : 'images/[name].[hash][ext]' ,
83
+ {
84
+ test : / \. ( w o f f | w o f f 2 | e o t | t t f | o t f ) $ / i,
85
+ // asset 自动地在 asset/resource 和 asset/inline 之间进行选择, 默认size < 8kb 实行asset/inline
86
+ type : 'asset' ,
87
+ parser : {
88
+ dataUrlCondition : {
89
+ maxSize : 4 * 1024 // 4kb
90
+ }
91
+ } ,
92
+ generator : {
93
+ filename : 'fonts/[name].[hash][ext]' ,
94
+ } ,
75
95
} ,
76
- } ,
77
- {
78
- test : / \. ( w o f f | w o f f 2 | e o t | t t f | o t f ) $ / i,
79
- // asset 自动地在 asset/resource 和 asset/inline 之间进行选择, 默认size < 8kb 实行asset/inline
80
- type : 'asset' ,
81
- parser : {
82
- dataUrlCondition : {
83
- maxSize : 4 * 1024 // 4kb
96
+ ] ,
97
+ } ,
98
+ plugins : [
99
+ new CopyWebpackPlugin ( {
100
+ patterns : [
101
+ {
102
+ from : path . resolve ( __dirname , '../static' ) ,
103
+ to : path . resolve ( __dirname , '../dist' ) ,
104
+ noErrorOnMissing : true
84
105
}
85
- } ,
86
- generator : {
87
- filename : 'fonts/[name].[hash][ext]' ,
88
- } ,
89
- } ,
106
+ ]
107
+ } ) ,
108
+ new ESLintPlugin ( ) ,
109
+ new VueLoaderPlugin ( ) ,
110
+ // 注入webpack编译时js中的全局变量
111
+ new webpack . DefinePlugin ( {
112
+ 'process.env.THEME' : JSON . stringify ( process . env . THEME )
113
+ } )
90
114
] ,
91
- } ,
92
- plugins : [
93
- new CopyWebpackPlugin ( {
94
- patterns : [
95
- {
96
- from : path . resolve ( __dirname , '../static' ) ,
97
- to : path . resolve ( __dirname , '../dist' ) ,
98
- noErrorOnMissing : true
99
- }
100
- ]
101
- } ) ,
102
- new ESLintPlugin ( ) ,
103
- new VueLoaderPlugin ( ) ,
104
- // 提取style生成 css文件
105
- new MiniCssExtractPlugin ( {
106
- filename : 'css/[name].[contenthash:8].css' ,
107
- chunkFilename : 'css/[id][contenthash:8].css' ,
108
- ignoreOrder : true
109
- } ) ,
110
- // 注入webpack编译时js中的全局变量
111
- new webpack . DefinePlugin ( {
112
- 'process.env.THEME' : JSON . stringify ( process . env . THEME )
113
- } )
114
- ] ,
115
- resolve : {
116
- // 路径别名以及文件默认查找后缀数组
117
- alias : {
118
- '@' : path . resolve ( __dirname , '../src' ) ,
119
- '@styles' : path . resolve ( __dirname , '../src/styles' ) ,
120
- '@images' : path . resolve ( __dirname , '../src/images' ) ,
121
- '@theme' : path . resolve ( __dirname , `../src/styles/themes/${ process . env . THEME } .scss` )
122
- } ,
123
- extensions : [ '.js' , '.ts' , '.jsx' , '.tsx' , '.vue' , '.json' ] ,
124
- }
115
+ resolve : {
116
+ // 路径别名以及文件默认查找后缀数组
117
+ alias : {
118
+ '@' : path . resolve ( __dirname , '../src' ) ,
119
+ '@styles' : path . resolve ( __dirname , '../src/styles' ) ,
120
+ '@images' : path . resolve ( __dirname , '../src/images' ) ,
121
+ '@theme' : path . resolve ( __dirname , `../src/styles/themes/${ process . env . THEME } .scss` )
122
+ } ,
123
+ extensions : [ '.js' , '.ts' , '.jsx' , '.tsx' , '.vue' , '.json' ] ,
124
+ }
125
+ } ;
125
126
} ;
0 commit comments