Skip to content

Commit 9e3b321

Browse files
authored
Merge pull request #2216 from ZeroX-DG/improve-dev-script
Improved dev script
2 parents 2156070 + dd62fca commit 9e3b321

File tree

3 files changed

+94
-16
lines changed

3 files changed

+94
-16
lines changed

dev-scripts/dev.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
const webpack = require('webpack')
2+
const WebpackDevServer = require('webpack-dev-server')
3+
const config = require('../webpack.config')
4+
const signale = require('signale')
5+
const { spawn } = require('child_process')
6+
const electron = require('electron')
7+
const port = 8080
8+
let server = null
9+
let firstRun = true
10+
11+
const options = {
12+
publicPath: config.output.publicPath,
13+
hot: true,
14+
inline: true,
15+
quiet: true
16+
}
17+
18+
function startServer () {
19+
config.plugins.push(new webpack.HotModuleReplacementPlugin())
20+
config.entry.main.unshift(
21+
`webpack-dev-server/client?http://localhost:${port}/`,
22+
'webpack/hot/dev-server'
23+
)
24+
const compiler = webpack(config)
25+
server = new WebpackDevServer(compiler, options)
26+
27+
return new Promise((resolve, reject) => {
28+
server.listen(port, 'localhost', function (err) {
29+
if (err) {
30+
reject(err)
31+
}
32+
signale.success(`Webpack Dev Server listening at localhost:${port}`)
33+
signale.watch(`Waiting for webpack to bundle...`)
34+
compiler.plugin('done', stats => {
35+
if (!stats.hasErrors()) {
36+
signale.success(`Bundle success !`)
37+
resolve()
38+
} else {
39+
if (!firstRun) {
40+
console.log(stats.compilation.errors[0])
41+
} else {
42+
firstRun = false
43+
reject(stats.compilation.errors[0])
44+
}
45+
}
46+
})
47+
})
48+
})
49+
}
50+
51+
function startElectron () {
52+
spawn(electron, ['--hot', './index.js'])
53+
.on('close', () => {
54+
server.close()
55+
})
56+
.on('error', err => {
57+
signale.error(err)
58+
server.close()
59+
})
60+
.on('disconnect', () => {
61+
server.close()
62+
})
63+
.on('exit', () => {
64+
server.close()
65+
})
66+
}
67+
68+
startServer()
69+
.then(() => {
70+
startElectron()
71+
signale.success('Electron started')
72+
})
73+
.catch(err => {
74+
signale.error(err)
75+
process.exit(1)
76+
})

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@
77
"license": "GPL-3.0",
88
"scripts": {
99
"start": "electron ./index.js",
10-
"hot": "electron ./index.js --hot",
11-
"webpack": "webpack-dev-server --hot --inline --config webpack.config.js",
1210
"compile": "grunt compile",
1311
"test": "PWD=$(pwd) NODE_ENV=test ava --serial",
1412
"jest": "jest",
1513
"fix": "eslint . --fix",
1614
"lint": "eslint .",
17-
"dev-start": "concurrently --kill-others \"npm run webpack\" \"npm run hot\""
15+
"dev": "node dev-scripts/dev.js"
1816
},
1917
"config": {
2018
"electron-version": "2.0.7"
@@ -145,6 +143,7 @@
145143
"react-router": "^2.4.0",
146144
"react-router-redux": "^4.0.4",
147145
"react-test-renderer": "^15.6.2",
146+
"signale": "^1.2.1",
148147
"standard": "^8.4.0",
149148
"style-loader": "^0.12.4",
150149
"stylus": "^0.52.4",

webpack-skeleton.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,24 @@ const NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin')
44

55
var config = {
66
entry: {
7-
main: './browser/main/index.js'
7+
main: ['./browser/main/index.js']
88
},
99
resolve: {
1010
extensions: ['', '.js', '.jsx', '.styl'],
11-
packageMains: ['webpack', 'browser', 'web', 'browserify', ['jam', 'main'], 'main'],
11+
packageMains: [
12+
'webpack',
13+
'browser',
14+
'web',
15+
'browserify',
16+
['jam', 'main'],
17+
'main'
18+
],
1219
alias: {
13-
'lib': path.join(__dirname, 'lib'),
14-
'browser': path.join(__dirname, 'browser')
20+
lib: path.join(__dirname, 'lib'),
21+
browser: path.join(__dirname, 'browser')
1522
}
1623
},
17-
plugins: [
18-
new webpack.NoErrorsPlugin(),
19-
new NodeTargetPlugin()
20-
],
24+
plugins: [new webpack.NoErrorsPlugin(), new NodeTargetPlugin()],
2125
stylus: {
2226
use: [require('nib')()],
2327
import: [
@@ -43,14 +47,13 @@ var config = {
4347
react: 'var React',
4448
'react-dom': 'var ReactDOM',
4549
'react-redux': 'var ReactRedux',
46-
'codemirror': 'var CodeMirror',
47-
'redux': 'var Redux',
48-
'raphael': 'var Raphael',
49-
'flowchart': 'var flowchart',
50+
codemirror: 'var CodeMirror',
51+
redux: 'var Redux',
52+
raphael: 'var Raphael',
53+
flowchart: 'var flowchart',
5054
'sequence-diagram': 'var Diagram'
5155
}
5256
]
5357
}
5458

5559
module.exports = config
56-

0 commit comments

Comments
 (0)