1 |
|
2 |
|
3 |
|
4 |
|
5 | const Koa = require('koa')
|
6 | const KoaRouter = require('koa-router')()
|
7 | const webpack = require('webpack')
|
8 | const path = require('path')
|
9 | const currentIP = require('ip').address()
|
10 |
|
11 | const opn = require('opn')
|
12 | const loggerMiddleware = require('koa-logger')()
|
13 | const convert = require('koa-convert')
|
14 | const webpackDevMiddleware = require('koa-webpack-dev-middleware')
|
15 | const webpackHotMiddleware = require('koa-webpack-hot-middleware')
|
16 |
|
17 | const appConfig = require(path.join(process.cwd(), 'app.config'))
|
18 | const config = require('./webpack.config.dev')
|
19 | const clientCompiler = webpack(config)
|
20 |
|
21 | const errorMiddleware = require('./koa2-middle/errorMiddleWare')
|
22 | const fileMiddle = require('./koa2-middle/fileMiddle')
|
23 | const proxyMiddleware = require('./koa2-middle/proxyMiddleware')
|
24 |
|
25 | const app = new Koa()
|
26 | const uri = 'http://' + currentIP + ':' + appConfig.appPort
|
27 |
|
28 | const devMiddleware = webpackDevMiddleware(clientCompiler, {
|
29 | headers: { 'Access-Control-Allow-Origin': '*' },
|
30 | stats: {
|
31 | colors: true,
|
32 | modules: false,
|
33 | },
|
34 | noInfo: false,
|
35 | watchOptions: {
|
36 | aggregateTimeout: 300,
|
37 | poll: true
|
38 | },
|
39 | })
|
40 |
|
41 |
|
42 | const middleWares = [
|
43 |
|
44 | loggerMiddleware,
|
45 |
|
46 | require('koa-compress')(),
|
47 |
|
48 | errorMiddleware,
|
49 |
|
50 | convert(devMiddleware),
|
51 |
|
52 | convert(webpackHotMiddleware(clientCompiler)),
|
53 |
|
54 | KoaRouter.middleware(),
|
55 |
|
56 | fileMiddle,
|
57 |
|
58 | proxyMiddleware(),
|
59 | ]
|
60 |
|
61 | middleWares.forEach((middleware) => {
|
62 | if (!middleware) {
|
63 | return
|
64 | }
|
65 | app.use(middleware)
|
66 | })
|
67 |
|
68 | console.log('> Starting dev server...')
|
69 |
|
70 | devMiddleware.waitUntilValid(() => {
|
71 | console.log('> Listening at ' + uri + '\n')
|
72 | opn(uri)
|
73 | })
|
74 |
|
75 |
|
76 | app.on('error', (err) => {
|
77 |
|
78 | })
|
79 |
|
80 | const server = app.listen(appConfig.appPort)
|
81 |
|
82 | process.on('SIGTERM', () => {
|
83 | console.log('Stopping dev server')
|
84 | devMiddleware.close()
|
85 | server.close(() => {
|
86 | process.exit(0)
|
87 | })
|
88 | })
|