UNPKG

2.2 kBJavaScriptView Raw
1/**
2 *开发环境koa2 server 配置
3 * Created by liuzhengdong on 2018/4/3.
4 */
5const Koa = require('koa')
6const KoaRouter = require('koa-router')()
7const webpack = require('webpack')
8const path = require('path')
9const currentIP = require('ip').address()
10
11const opn = require('opn')
12const loggerMiddleware = require('koa-logger')()
13const convert = require('koa-convert')
14const webpackDevMiddleware = require('koa-webpack-dev-middleware')
15const webpackHotMiddleware = require('koa-webpack-hot-middleware')
16
17const appConfig = require(path.join(process.cwd(), 'app.config'))
18const config = require('./webpack.config.dev')
19const clientCompiler = webpack(config)
20
21const errorMiddleware = require('./koa2-middle/errorMiddleWare')
22const fileMiddle = require('./koa2-middle/fileMiddle')
23const proxyMiddleware = require('./koa2-middle/proxyMiddleware')
24
25const app = new Koa()
26const uri = 'http://' + currentIP + ':' + appConfig.appPort
27
28const 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// 中间件,一组async函数,generator函数需要convert转换
42const middleWares = [
43 // 打印请求与响应 日志
44 loggerMiddleware,
45 // 压缩响应
46 require('koa-compress')(),
47 // 错误处理
48 errorMiddleware,
49 // webpack开发中间件
50 convert(devMiddleware),
51 // webpack热替换中间件
52 convert(webpackHotMiddleware(clientCompiler)),
53 // 路由
54 KoaRouter.middleware(),
55 // file中间件
56 fileMiddle,
57 // 代理中间件
58 proxyMiddleware(),
59]
60
61middleWares.forEach((middleware) => {
62 if (!middleware) {
63 return
64 }
65 app.use(middleware)
66})
67
68console.log('> Starting dev server...')
69
70devMiddleware.waitUntilValid(() => {
71 console.log('> Listening at ' + uri + '\n')
72 opn(uri)
73})
74
75// 错误处理
76app.on('error', (err) => {
77 // console.error('Server error: \n%s\n%s ', err.stack || '')
78})
79
80const server = app.listen(appConfig.appPort)
81
82process.on('SIGTERM', () => {
83 console.log('Stopping dev server')
84 devMiddleware.close()
85 server.close(() => {
86 process.exit(0)
87 })
88})