@@ -9,6 +9,9 @@ const TerserPlugin = require('terser-webpack-plugin');
9
9
// @if jasmine || mocha
10
10
const WebpackShellPluginNext = require ( 'webpack-shell-plugin-next' )
11
11
// @endif
12
+ // @if plugin
13
+ const nodeExternals = require ( 'webpack-node-externals' ) ;
14
+ // @endif
12
15
13
16
// @if sass
14
17
const sassLoader = {
@@ -36,7 +39,12 @@ module.exports = function(env, { /* @if jasmine || mocha*/runTest, /* @endif */a
36
39
const test = env . test || process . env . NODE_ENV === 'test' ;
37
40
// @endif
38
41
return {
42
+ // @if app
39
43
target : 'web' ,
44
+ // @endif
45
+ // @if plugin
46
+ target : production ? 'node' : 'web' ,
47
+ // @endif
40
48
mode : production ? 'production' : 'development' ,
41
49
devtool : production ? undefined : 'eval-source-map' ,
42
50
optimization : {
@@ -56,22 +64,42 @@ module.exports = function(env, { /* @if jasmine || mocha*/runTest, /* @endif */a
56
64
entry : {
57
65
entry : test ?
58
66
'./test/all-spec./* @if babel */js/* @endif *//* @if typescript */ts/* @endif */' :
67
+ // @if app
59
68
'./src/main./* @if babel */js/* @endif *//* @if typescript */ts/* @endif */'
69
+ // @endif
70
+ // @if plugin
71
+ // Build only plugin in production mode,
72
+ // build dev-app in non-production mode
73
+ ( production ? './src/index./* @if babel */js/* @endif *//* @if typescript */ts/* @endif */' : './dev-app/main./* @if babel */js/* @endif *//* @if typescript */ts/* @endif */' )
74
+ // @endif
60
75
} ,
61
76
// @endif
62
77
// @if !jasmine && !mocha
63
78
entry : {
79
+ // @if app
64
80
entry : './src/main./* @if babel */js/* @endif *//* @if typescript */ts/* @endif */'
81
+ // @endif
82
+ // @if plugin
83
+ // Build only plugin in production mode,
84
+ // build dev-app in non-production mode
85
+ entry : production ? './src/index./* @if babel */js/* @endif *//* @if typescript */ts/* @endif */' : './dev-app/main./* @if babel */js/* @endif *//* @if typescript */ts/* @endif */'
86
+ // @endif
65
87
} ,
66
88
// @endif
67
89
output : {
68
90
clean : true ,
69
91
path : path . resolve ( __dirname , 'dist' ) ,
92
+ // @if app
70
93
filename : production ? '[name].[contenthash].bundle.js' : '[name].bundle.js'
94
+ // @endif
95
+ // @if plugin
96
+ filename : production ? 'index.js' : '[name].bundle.js' ,
97
+ library : production ? { type : 'commonjs' } : undefined
98
+ // @endif
71
99
} ,
72
100
resolve : {
73
101
extensions : [ /* @if typescript */ '.ts' , /* @endif */ '.js' ] ,
74
- modules : [ path . resolve ( __dirname , 'src' ) , 'node_modules' ] ,
102
+ modules : [ path . resolve ( __dirname , 'src' ) , /* @if plugin */ path . resolve ( __dirname , 'dev-app' ) , /* @endif */ 'node_modules' ] ,
75
103
alias : production ? {
76
104
// add your production aliases here
77
105
} : {
@@ -178,7 +206,12 @@ module.exports = function(env, { /* @if jasmine || mocha*/runTest, /* @endif */a
178
206
{ test : / \. t s $ / i, use : [ 'ts-loader' , '@aurelia/webpack-loader' ] , exclude : / n o d e _ m o d u l e s / } ,
179
207
// @endif
180
208
{
209
+ // @if app
181
210
test : / [ / \\ ] s r c [ / \\ ] .+ \. h t m l $ / i,
211
+ // @endif
212
+ // @if plugin
213
+ test : / [ / \\ ] (?: s r c | d e v - a p p ) [ / \\ ] .+ \. h t m l $ / i,
214
+ // @endif
182
215
// @if shadow-dom
183
216
use : {
184
217
loader : '@aurelia/webpack-loader' ,
@@ -198,8 +231,15 @@ module.exports = function(env, { /* @if jasmine || mocha*/runTest, /* @endif */a
198
231
}
199
232
]
200
233
} ,
234
+ // @if plugin
235
+ externalsPresets : { node : production } ,
236
+ externals : [
237
+ // Skip npm dependencies in plugin build.
238
+ production && nodeExternals ( )
239
+ ] . filter ( p => p ) ,
240
+ // @endif
201
241
plugins : [
202
- new HtmlWebpackPlugin ( { template : 'index.html' , favicon : 'favicon.ico' } ) ,
242
+ /* @if plugin */ ! production && /* @endif */ new HtmlWebpackPlugin ( { template : 'index.html' , favicon : 'favicon.ico' } ) ,
203
243
new Dotenv ( {
204
244
path : `./.env${ production ? '' : '.' + ( process . env . NODE_ENV || 'development' ) } ` ,
205
245
} ) ,
0 commit comments