@@ -3,101 +3,97 @@ const webpack = require('webpack');
3
3
const HtmlWebpackPlugin = require ( 'html-webpack-plugin' ) ;
4
4
const MiniCssExtractPlugin = require ( 'mini-css-extract-plugin' ) ;
5
5
const ForkTsCheckerWebpackPlugin = require ( 'fork-ts-checker-webpack-plugin' ) ;
6
- const VueLoaderPlugin = require ( 'vue-loader/lib/plugin' ) ;
7
6
8
7
const basePath = __dirname ;
9
8
10
- module . exports = {
11
- context : path . join ( basePath , 'src' ) ,
12
- resolve : {
13
- extensions : [ '.js' , '.ts' , '.vue' ] ,
14
- alias : {
15
- vue : 'vue/dist/vue.runtime.esm.js' ,
9
+ module . exports = ( env , argv ) => {
10
+ const isDev = argv . mode !== 'production' ;
11
+ return {
12
+ context : path . join ( basePath , 'src' ) ,
13
+ resolve : {
14
+ extensions : [ '.js' , '.ts' , '.vue' ] ,
15
+ alias : {
16
+ vue : 'vue/dist/vue.runtime.esm.js' ,
17
+ } ,
18
+ } ,
19
+ entry : {
20
+ app : './main.ts' ,
21
+ vendor : [ 'vue' ] ,
22
+ } ,
23
+ output : {
24
+ path : path . join ( basePath , 'dist' ) ,
25
+ filename : '[name].js' ,
16
26
} ,
17
- } ,
18
- mode : 'development' ,
19
- entry : {
20
- app : './main.ts' ,
21
- vendor : [
22
- 'vue' ,
23
- ] ,
24
- } ,
25
- output : {
26
- path : path . join ( basePath , 'dist' ) ,
27
- filename : '[name].js' ,
28
- } ,
29
- optimization : {
30
- splitChunks : {
31
- cacheGroups : {
32
- vendor : {
33
- test : / n o d e _ m o d u l e s / ,
34
- name : 'vendor' ,
35
- chunks : 'initial' ,
36
- enforce : true
27
+ optimization : {
28
+ splitChunks : {
29
+ cacheGroups : {
30
+ vendor : {
31
+ test : / n o d e _ m o d u l e s / ,
32
+ name : 'vendor' ,
33
+ chunks : 'initial' ,
34
+ enforce : true ,
35
+ } ,
37
36
} ,
38
37
} ,
39
38
} ,
40
- } ,
41
- module : {
42
- rules : [
43
- {
44
- test : / \. v u e $ / ,
45
- exclude : / n o d e _ m o d u l e s / ,
46
- loader : 'vue-loader' ,
47
- } ,
48
- {
49
- test : / \. t s $ / ,
50
- exclude : / n o d e _ m o d u l e s / ,
51
- use : {
52
- loader : 'ts-loader' ,
53
- options : {
54
- appendTsSuffixTo : [ / \. v u e $ / ] ,
55
- transpileOnly : true ,
39
+ module : {
40
+ rules : [
41
+ {
42
+ test : / \. v u e $ / ,
43
+ exclude : / n o d e _ m o d u l e s / ,
44
+ loader : 'vue-loader' ,
45
+ } ,
46
+ {
47
+ test : / \. t s $ / ,
48
+ use : {
49
+ loader : 'ts-loader' ,
50
+ options : {
51
+ appendTsSuffixTo : [ / \. v u e $ / ] , // Add suffix to vue files to transpile ts scripts in vue files
52
+ transpileOnly : true ,
53
+ } ,
56
54
} ,
57
55
} ,
58
- } ,
59
- {
60
- test : / \. c s s $ / ,
61
- use : [
62
- process . env . NODE_ENV !== 'production'
63
- ? 'vue-style-loader'
64
- : MiniCssExtractPlugin . loader ,
65
- 'css-loader' ,
66
- ] ,
67
- } ,
68
- {
69
- test : / \. ( w o f f | w o f f 2 ) ( \? v = \d + \. \d + \. \d + ) ? $ / ,
70
- loader : 'url-loader?limit=10000&mimetype=application/font-woff'
71
- } ,
72
- {
73
- test : / \. t t f ( \? v = \d + \. \d + \. \d + ) ? $ / ,
74
- loader : 'url-loader?limit=10000&mimetype=application/octet-stream'
75
- } ,
76
- {
77
- test : / \. e o t ( \? v = \d + \. \d + \. \d + ) ? $ / ,
78
- loader : 'file-loader'
79
- } ,
80
- {
81
- test : / \. s v g ( \? v = \d + \. \d + \. \d + ) ? $ / ,
82
- loader : 'url-loader?limit=10000&mimetype=image/svg+xml'
83
- } ,
84
- ]
85
- } ,
86
- devtool : 'inline-source-map' ,
87
- plugins : [
88
- new HtmlWebpackPlugin ( {
89
- filename : 'index.html' ,
90
- template : 'index.html' ,
91
- hash : true ,
92
- } ) ,
93
- new webpack . HashedModuleIdsPlugin ( ) ,
94
- new MiniCssExtractPlugin ( {
95
- filename : '[name].css' ,
96
- } ) ,
97
- new ForkTsCheckerWebpackPlugin ( {
98
- tsconfig : path . join ( __dirname , './tsconfig.json' ) ,
99
- vue : true ,
100
- } ) ,
101
- new VueLoaderPlugin ( ) ,
102
- ] ,
56
+ {
57
+ test : / \. c s s $ / ,
58
+ use : [ isDev ? 'vue-style-loader' : MiniCssExtractPlugin . loader , 'css-loader' ] ,
59
+ } ,
60
+ {
61
+ test : / \. ( w o f f | w o f f 2 ) ( \? v = \d + \. \d + \. \d + ) ? $ / ,
62
+ loader : 'url-loader?limit=10000&mimetype=application/font-woff' ,
63
+ } ,
64
+ {
65
+ test : / \. t t f ( \? v = \d + \. \d + \. \d + ) ? $ / ,
66
+ loader : 'url-loader?limit=10000&mimetype=application/octet-stream' ,
67
+ } ,
68
+ {
69
+ test : / \. e o t ( \? v = \d + \. \d + \. \d + ) ? $ / ,
70
+ loader : 'file-loader' ,
71
+ } ,
72
+ {
73
+ test : / \. s v g ( \? v = \d + \. \d + \. \d + ) ? $ / ,
74
+ loader : 'url-loader?limit=10000&mimetype=image/svg+xml' ,
75
+ } ,
76
+ ] ,
77
+ } ,
78
+ devtool : isDev ? 'inline-source-map' : 'none' ,
79
+ plugins : [
80
+ new HtmlWebpackPlugin ( {
81
+ filename : 'index.html' ,
82
+ template : 'index.html' ,
83
+ hash : true ,
84
+ } ) ,
85
+ new MiniCssExtractPlugin ( {
86
+ filename : '[name].css' ,
87
+ } ) ,
88
+ new ForkTsCheckerWebpackPlugin ( {
89
+ tsconfig : path . join ( basePath , './tsconfig.json' ) ,
90
+ vue : true ,
91
+ } ) ,
92
+ new VueLoaderPlugin ( ) ,
93
+ isDev &&
94
+ new webpack . DefinePlugin ( {
95
+ 'process.env.NODE_ENV' : JSON . stringify ( 'development' ) ,
96
+ } ) ,
97
+ ] . filter ( Boolean ) ,
98
+ } ;
103
99
} ;
0 commit comments