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:
parent
e296ff9e59
commit
ae5098599a
12
bin/next-dev
12
bin/next-dev
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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 () {
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
Loading…
Reference in a new issue