@@ -11,89 +11,118 @@ const BANNER = `GraphQL Voyager - Represent any GraphQL API as an interactive gr
11
11
Repo: ${ packageJSON . repository . url } ` ;
12
12
13
13
interface Env {
14
+ min ?: boolean ;
14
15
lib ?: boolean ;
16
+ standalone ?: boolean ;
15
17
}
16
18
17
19
export default function buildWebpackConfig ( env : Env ) : webpack . Configuration {
18
- return {
19
- performance : {
20
- hints : false ,
21
- } ,
20
+ if ( env . lib === true ) {
21
+ return {
22
+ ...baseConfig ,
23
+ externals : NodeExternals ( ) ,
24
+ output : {
25
+ ...baseConfig . output ,
26
+ filename : 'voyager.lib.js' ,
27
+ } ,
28
+ } ;
29
+ }
22
30
23
- optimization : {
24
- minimize : ! env . lib ,
25
- } ,
31
+ if ( env . standalone === true ) {
32
+ return {
33
+ ...baseConfig ,
34
+ optimization : { minimize : true } ,
35
+ externals : undefined ,
36
+ output : {
37
+ ...baseConfig . output ,
38
+ filename : 'voyager.standalone.js' ,
39
+ } ,
40
+ } ;
41
+ }
26
42
27
- resolve : {
28
- extensions : [ '.ts' , '.tsx' , '.mjs' , '.js' , '.json' , '.css' , '.svg' ] ,
29
- alias : { '../../worker' : '../../worker-dist' } ,
30
- } ,
31
-
32
- externals : env . lib
33
- ? NodeExternals ( )
34
- : {
35
- react : {
36
- root : 'React' ,
37
- commonjs2 : 'react' ,
38
- commonjs : 'react' ,
39
- amd : 'react' ,
40
- } ,
41
- 'react-dom' : {
42
- root : 'ReactDOM' ,
43
- commonjs2 : 'react-dom' ,
44
- commonjs : 'react-dom' ,
45
- amd : 'react-dom' ,
46
- } ,
47
- } ,
48
- entry : './src/index.tsx' ,
49
- output : {
50
- path : path . resolve ( __dirname , 'dist' ) ,
51
- filename : env . lib ? 'voyager.lib.js' : 'voyager.min.js' ,
52
- sourceMapFilename : '[file].map' ,
53
- library : 'GraphQLVoyager' ,
54
- libraryTarget : 'umd' ,
55
- umdNamedDefine : true ,
56
- } ,
57
- module : {
58
- rules : [
59
- {
60
- test : / \. t s x ? $ / ,
61
- use : {
62
- loader : 'ts-loader' ,
63
- options : { compilerOptions : { noEmit : false } } ,
64
- } ,
65
- exclude : [ / \. ( s p e c | e 2 e ) \. t s $ / ] ,
66
- } ,
67
- {
68
- test : / \. c s s $ / ,
69
- exclude : / v a r i a b l e s \. c s s $ / ,
70
- use : [
71
- MiniCssExtractPlugin . loader ,
72
- {
73
- loader : 'css-loader' ,
74
- options : { sourceMap : true } ,
75
- } ,
76
- { loader : 'postcss-loader' , options : { sourceMap : true } } ,
77
- ] ,
43
+ // TODO: delete in next major version
44
+ if ( env . min === true ) {
45
+ return {
46
+ ...baseConfig ,
47
+ optimization : { minimize : true } ,
48
+ externals : {
49
+ react : {
50
+ root : 'React' ,
51
+ commonjs2 : 'react' ,
52
+ commonjs : 'react' ,
53
+ amd : 'react' ,
78
54
} ,
79
- {
80
- test : / v a r i a b l e s \. c s s $ / ,
81
- use : [ { loader : 'postcss-variables-loader?es5=1' } ] ,
55
+ 'react-dom' : {
56
+ root : 'ReactDOM' ,
57
+ commonjs2 : 'react-dom' ,
58
+ commonjs : 'react-dom' ,
59
+ amd : 'react-dom' ,
82
60
} ,
83
- {
84
- test : / \. s v g $ / ,
85
- issuer : / \. t s x ? $ / ,
86
- use : [ { loader : '@svgr/webpack' } ] ,
61
+ } ,
62
+ output : {
63
+ ...baseConfig . output ,
64
+ filename : 'voyager.min.js' ,
65
+ } ,
66
+ } ;
67
+ }
68
+ throw new Error ( 'Please specify correct env' ) ;
69
+ }
70
+
71
+ const baseConfig : webpack . Configuration = {
72
+ performance : {
73
+ hints : false ,
74
+ } ,
75
+ resolve : {
76
+ extensions : [ '.ts' , '.tsx' , '.mjs' , '.js' , '.json' , '.css' , '.svg' ] ,
77
+ alias : { '../../worker' : '../../worker-dist' } ,
78
+ } ,
79
+ entry : './src/index.tsx' ,
80
+ output : {
81
+ path : path . resolve ( __dirname , 'dist' ) ,
82
+ sourceMapFilename : '[file].map' ,
83
+ library : 'GraphQLVoyager' ,
84
+ libraryTarget : 'umd' ,
85
+ umdNamedDefine : true ,
86
+ } ,
87
+ module : {
88
+ rules : [
89
+ {
90
+ test : / \. t s x ? $ / ,
91
+ use : {
92
+ loader : 'ts-loader' ,
93
+ options : { compilerOptions : { noEmit : false } } ,
87
94
} ,
88
- ] ,
89
- } ,
95
+ exclude : [ / \. ( s p e c | e 2 e ) \. t s $ / ] ,
96
+ } ,
97
+ {
98
+ test : / \. c s s $ / ,
99
+ exclude : / v a r i a b l e s \. c s s $ / ,
100
+ use : [
101
+ MiniCssExtractPlugin . loader ,
102
+ {
103
+ loader : 'css-loader' ,
104
+ options : { sourceMap : true } ,
105
+ } ,
106
+ { loader : 'postcss-loader' , options : { sourceMap : true } } ,
107
+ ] ,
108
+ } ,
109
+ {
110
+ test : / v a r i a b l e s \. c s s $ / ,
111
+ use : [ { loader : 'postcss-variables-loader?es5=1' } ] ,
112
+ } ,
113
+ {
114
+ test : / \. s v g $ / ,
115
+ issuer : / \. t s x ? $ / ,
116
+ use : [ { loader : '@svgr/webpack' } ] ,
117
+ } ,
118
+ ] ,
119
+ } ,
90
120
91
- plugins : [
92
- new MiniCssExtractPlugin ( {
93
- filename : 'voyager.css' ,
94
- } ) ,
121
+ plugins : [
122
+ new MiniCssExtractPlugin ( {
123
+ filename : 'voyager.css' ,
124
+ } ) ,
95
125
96
- new webpack . BannerPlugin ( BANNER ) ,
97
- ] ,
98
- } ;
99
- }
126
+ new webpack . BannerPlugin ( BANNER ) ,
127
+ ] ,
128
+ } ;
0 commit comments