1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00

hot-reloader: refactoring

This commit is contained in:
nkzawa 2016-10-17 16:05:46 +09:00
parent e296ff9e59
commit ae5098599a
3 changed files with 26 additions and 22 deletions

View file

@ -4,8 +4,6 @@ import { resolve, join } from 'path'
import parseArgs from 'minimist' import parseArgs from 'minimist'
import { exists } from 'mz/fs' import { exists } from 'mz/fs'
import Server from '../server' import Server from '../server'
import HotReloader from '../server/hot-reloader'
import webpack from '../server/build/webpack'
import clean from '../server/build/clean' import clean from '../server/build/clean'
const argv = parseArgs(process.argv.slice(2), { const argv = parseArgs(process.argv.slice(2), {
@ -27,13 +25,9 @@ const open = url => {
const dir = resolve(argv._[0] || '.') const dir = resolve(argv._[0] || '.')
Promise.all([ clean(dir)
webpack(dir, { hotReload: true }), .then(async () => {
clean(dir) const srv = new Server({ dir, dev: true, hotReload: true })
])
.then(async ([compiler]) => {
const hotReloader = new HotReloader(compiler)
const srv = new Server({ dir, dev: true, hotReloader })
await srv.start(argv.port) await srv.start(argv.port)
console.log('> Ready on http://localhost:%d', argv.port) console.log('> Ready on http://localhost:%d', argv.port)

View file

@ -1,14 +1,21 @@
import WebpackDevServer from 'webpack-dev-server' import WebpackDevServer from 'webpack-dev-server'
import webpack from './build/webpack'
import read from './read' import read from './read'
export default class HotReloader { export default class HotReloader {
constructor (compiler) { constructor (dir) {
this.server = new WebpackDevServer(compiler, { this.dir = dir
publicPath: '/', this.server = null
hot: true, }
noInfo: true,
clientLogLevel: 'warning' async start () {
}) await this.prepareServer()
await this.waitBuild()
await this.listen()
}
async prepareServer () {
const compiler = await webpack(this.dir, { hotReload: true })
compiler.plugin('after-emit', (compilation, callback) => { compiler.plugin('after-emit', (compilation, callback) => {
const { assets } = compilation const { assets } = compilation
@ -20,11 +27,13 @@ export default class HotReloader {
} }
callback() callback()
}) })
}
async start () { this.server = new WebpackDevServer(compiler, {
await this.waitBuild() publicPath: '/',
await this.listen() hot: true,
noInfo: true,
clientLogLevel: 'warning'
})
} }
async waitBuild () { async waitBuild () {

View file

@ -3,12 +3,13 @@ import { resolve } from 'path'
import send from 'send' import send from 'send'
import Router from './router' import Router from './router'
import { render, renderJSON } from './render' import { render, renderJSON } from './render'
import HotReloader from './hot-reloader'
export default class Server { export default class Server {
constructor ({ dir = '.', dev = false, hotReloader }) { constructor ({ dir = '.', dev = false, hotReload = false }) {
this.dir = resolve(dir) this.dir = resolve(dir)
this.dev = dev this.dev = dev
this.hotReloader = hotReloader this.hotReloader = hotReload ? new HotReloader(this.dir) : null
this.router = new Router() this.router = new Router()
this.http = http.createServer((req, res) => { this.http = http.createServer((req, res) => {