Skip to content
This repository was archived by the owner on Jan 14, 2022. It is now read-only.

Commit 920055c

Browse files
committed
improved dev script
1 parent ed12aec commit 920055c

File tree

4 files changed

+126
-4
lines changed

4 files changed

+126
-4
lines changed

package-lock.json

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
"description": "A snippet management app for developers",
55
"main": "index.js",
66
"scripts": {
7-
"start-dev": "electron ./index.js --hot",
87
"start": "electron ./index.js",
9-
"webpack": "webpack-dev-server --hot --inline --config scripts/webpack.config.js --mode development --port 8000",
108
"fix": "eslint . --fix",
119
"lint": "eslint .",
1210
"build": "node scripts/build.js",
@@ -15,7 +13,7 @@
1513
"dist:mac": "npm run build && rimraf dist/ && electron-builder --mac",
1614
"dist:win:linux": "npm run build && rimraf dist/ && electron-builder --win --linux",
1715
"dist:all": "npm run build && rimraf dist/ && electron-builder --win --linux --mac",
18-
"dev": "cross-env NODE_ENV=dev concurrently --success first --kill-others \"npm run webpack\" \"npm run start-dev\"",
16+
"dev": "node scripts/dev.js",
1917
"test": "cross-env NODE_ENV=test BABEL_ENV=test jest"
2018
},
2119
"jest": {
@@ -132,6 +130,7 @@
132130
"rimraf": "^2.6.2",
133131
"sass-loader": "^7.0.1",
134132
"sass-resources-loader": "^1.3.3",
133+
"signale": "^1.3.0",
135134
"style-loader": "^0.21.0",
136135
"svg-inline-loader": "^0.8.0",
137136
"webpack": "^4.6.0",

scripts/dev.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
process.env.NODE_ENV = 'dev'
2+
const webpack = require('webpack')
3+
const WebpackDevServer = require('webpack-dev-server')
4+
const config = require('./webpack.config')
5+
const signale = require('signale')
6+
const { spawn } = require('child_process')
7+
const electron = require('electron')
8+
const port = 8000
9+
let server = null
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.hooks.done.tap('done', stats => {
35+
if (!stats.hasErrors()) {
36+
signale.success(`Bundle success !`)
37+
resolve()
38+
} else {
39+
reject(stats.compilation.errors[0])
40+
}
41+
})
42+
})
43+
})
44+
}
45+
46+
function startElectron () {
47+
spawn(electron, ['--hot', './index.js'])
48+
.on('close', () => {
49+
server.close()
50+
})
51+
.on('error', err => {
52+
signale.error(err)
53+
server.close()
54+
})
55+
.on('disconnect', () => {
56+
server.close()
57+
})
58+
.on('exit', () => {
59+
server.close()
60+
})
61+
}
62+
63+
startServer()
64+
.then(() => {
65+
startElectron()
66+
signale.success('Electron started')
67+
})
68+
.catch(err => {
69+
signale.error(err)
70+
process.exit(1)
71+
})

scripts/webpack-skeleton.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ const path = require('path')
22

33
var config = {
44
entry: {
5-
main: path.join(__dirname, '../browser/index.jsx')
5+
main: [path.join(__dirname, '../browser/index.jsx')]
66
},
7+
mode: 'development',
78
module: {
89
rules: [
910
{

0 commit comments

Comments
 (0)