UNPKG

2.24 kBJavaScriptView Raw
1require('./lib/check-versions')()
2
3const proc = require('child_process')
4const ora = require('ora')
5const Koa = require('koa')
6const app = new Koa()
7
8const merge = require('webpack-merge')
9const staticMiddleware = require('koa-static')
10const webpackMiddleware = require('koa-webpack')
11const proxy = require('koa-proxies')
12const historyFallback = require('koa2-history-api-fallback')
13
14const { resolveCwd, isPlainObject } = require('./lib/utils')
15
16const tofurc = require('../lib/get-config')()
17
18module.exports = (port, peace) => {
19 let webpackConfig = require('./webpack.dev')
20 if (tofurc && tofurc.webpack && isPlainObject(tofurc.webpack)) {
21 webpackConfig = merge(webpackConfig, tofurc.webpack)
22 }
23 if (peace) {
24 webpackConfig.module.rules.shift()
25 }
26
27 const config = require('./config').dev
28 const webpack = require('webpack')
29 const compiler = webpack(webpackConfig)
30
31 const staticPath = resolveCwd(config.assetsPublicPath)
32 app.use(staticMiddleware(staticPath))
33 app.use(historyFallback())
34 const webpackMiddlewareInstance = webpackMiddleware({
35 compiler,
36 hot: { log: false },
37 dev: {
38 quiet: true,
39 publicPath: webpackConfig.output.publicPath
40 }
41 })
42 app.use(webpackMiddlewareInstance)
43
44 if (tofurc && tofurc.proxy) {
45 const proxyTable = tofurc.proxy
46 Object.keys(proxyTable).forEach(path => {
47 app.use(proxy(path, proxyTable[path]))
48 })
49 }
50
51 const spinner = new ora('等待 webpack 打包完成...')
52 spinner.start()
53
54 port = port || (tofurc && tofurc.port) || 8080
55 const host = (tofurc && tofurc.href) || 'localhost'
56 const url = `http://${host}:${port}`
57
58 app.listen(port)
59
60 webpackMiddlewareInstance.dev.waitUntilValid(() => {
61 spinner.stop()
62
63 if (tofurc._meta.type === 'electron') {
64 const child = proc.spawn(
65 process.platform === 'win32' ? 'npm.cmd' : 'npm',
66 ['run', 'dev'],
67 { stdio: 'inherit' }
68 )
69 child.on('close', function (code) {
70 process.exit(code)
71 })
72 } else {
73 require('opn')(url)
74 }
75 })
76}