Skip to content

Commit ae50985

Browse files
committed
hot-reloader: refactoring
1 parent e296ff9 commit ae50985

File tree

3 files changed

+26
-22
lines changed

3 files changed

+26
-22
lines changed

bin/next-dev

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import { resolve, join } from 'path'
44
import parseArgs from 'minimist'
55
import { exists } from 'mz/fs'
66
import Server from '../server'
7-
import HotReloader from '../server/hot-reloader'
8-
import webpack from '../server/build/webpack'
97
import clean from '../server/build/clean'
108

119
const argv = parseArgs(process.argv.slice(2), {
@@ -27,13 +25,9 @@ const open = url => {
2725

2826
const dir = resolve(argv._[0] || '.')
2927

30-
Promise.all([
31-
webpack(dir, { hotReload: true }),
32-
clean(dir)
33-
])
34-
.then(async ([compiler]) => {
35-
const hotReloader = new HotReloader(compiler)
36-
const srv = new Server({ dir, dev: true, hotReloader })
28+
clean(dir)
29+
.then(async () => {
30+
const srv = new Server({ dir, dev: true, hotReload: true })
3731
await srv.start(argv.port)
3832
console.log('> Ready on http://localhost:%d', argv.port)
3933

server/hot-reloader.js

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
import WebpackDevServer from 'webpack-dev-server'
2+
import webpack from './build/webpack'
23
import read from './read'
34

45
export default class HotReloader {
5-
constructor (compiler) {
6-
this.server = new WebpackDevServer(compiler, {
7-
publicPath: '/',
8-
hot: true,
9-
noInfo: true,
10-
clientLogLevel: 'warning'
11-
})
6+
constructor (dir) {
7+
this.dir = dir
8+
this.server = null
9+
}
10+
11+
async start () {
12+
await this.prepareServer()
13+
await this.waitBuild()
14+
await this.listen()
15+
}
16+
17+
async prepareServer () {
18+
const compiler = await webpack(this.dir, { hotReload: true })
1219

1320
compiler.plugin('after-emit', (compilation, callback) => {
1421
const { assets } = compilation
@@ -20,11 +27,13 @@ export default class HotReloader {
2027
}
2128
callback()
2229
})
23-
}
2430

25-
async start () {
26-
await this.waitBuild()
27-
await this.listen()
31+
this.server = new WebpackDevServer(compiler, {
32+
publicPath: '/',
33+
hot: true,
34+
noInfo: true,
35+
clientLogLevel: 'warning'
36+
})
2837
}
2938

3039
async waitBuild () {

server/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import { resolve } from 'path'
33
import send from 'send'
44
import Router from './router'
55
import { render, renderJSON } from './render'
6+
import HotReloader from './hot-reloader'
67

78
export default class Server {
8-
constructor ({ dir = '.', dev = false, hotReloader }) {
9+
constructor ({ dir = '.', dev = false, hotReload = false }) {
910
this.dir = resolve(dir)
1011
this.dev = dev
11-
this.hotReloader = hotReloader
12+
this.hotReloader = hotReload ? new HotReloader(this.dir) : null
1213
this.router = new Router()
1314

1415
this.http = http.createServer((req, res) => {

0 commit comments

Comments
 (0)