forked from joshuef/peruse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.renderer.live.dev.js
128 lines (112 loc) · 3.68 KB
/
webpack.config.renderer.live.dev.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* eslint global-require: 0, import/no-dynamic-require: 0 */
/**
* Build config for development electron renderer process that uses
* Hot-Module-Replacement
*
* https://webpack.js.org/concepts/hot-module-replacement/
*/
import path from 'path';
import fs from 'fs';
import webpack from 'webpack';
import chalk from 'chalk';
import merge from 'webpack-merge';
import { spawn, execSync } from 'child_process';
import ExtractTextPlugin from 'extract-text-webpack-plugin';
import baseConfig from './webpack.config.base';
const port = process.env.PORT || 1212;
const publicPath = `http://localhost:${port}/dist`;
const dll = path.resolve( process.cwd(), 'dll' );
const manifest = path.resolve( dll, 'vendor.json' );
/**
* Warn if the DLL is not built
*/
if ( !( fs.existsSync( dll ) && fs.existsSync( manifest ) ) )
{
console.log( chalk.black.bgYellow.bold(
'The DLL files are missing. Sit back while we build them for you with "npm run build-dll"'
) );
execSync( 'npm run build-dll' );
}
export default merge.smart( baseConfig, {
devtool : 'inline-source-map',
target : 'electron-renderer',
entry : [
'react-hot-loader/patch',
`webpack-dev-server/client?http://localhost:${port}/`,
'webpack/hot/only-dev-server',
path.join( __dirname, 'app/index.js' ),
],
output : {
publicPath : `http://localhost:${port}/dist/`
},
plugins : [
new webpack.DllReferencePlugin( {
context : process.cwd(),
manifest : require( manifest ),
sourceType : 'var',
} ),
/**
* https://webpack.js.org/concepts/hot-module-replacement/
*/
new webpack.HotModuleReplacementPlugin( {
multiStep : true
} ),
new webpack.NoEmitOnErrorsPlugin(),
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*
* By default, use 'development' as NODE_ENV. This can be overriden with
* 'staging', for example, by changing the ENV variables in the npm scripts
*/
new webpack.DefinePlugin( {
'process.env.NODE_ENV' : JSON.stringify( process.env.NODE_ENV || 'production' ),
'process.env.DEBUG_PROD' : JSON.stringify( 'true' ),
'process.env.IS_UNPACKED' : JSON.stringify( 'true' )
} ),
new webpack.LoaderOptionsPlugin( {
debug : true
} ),
new ExtractTextPlugin( {
filename : '[name].css'
} )
],
devServer : {
port,
publicPath,
compress : true,
noInfo : true,
stats : 'errors-only',
inline : true,
lazy : false,
hot : true,
headers : { 'Access-Control-Allow-Origin': '*' },
contentBase : path.join( __dirname, 'dist' ),
watchOptions : {
aggregateTimeout : 300,
poll : 100
},
historyApiFallback : {
verbose : true,
disableDotRule : false,
},
before()
{
if ( process.env.START_HOT )
{
spawn(
'npm',
['run', 'start-hot-renderer-live'],
{ shell: true, env: process.env, stdio: 'inherit' }
)
.on( 'close', code => process.exit( code ) )
.on( 'error', spawnError => console.error( spawnError ) );
}
}
},
} );