1 | require('./lib/check-versions')()
|
2 |
|
3 | const proc = require('child_process')
|
4 | const ora = require('ora')
|
5 | const Koa = require('koa')
|
6 | const app = new Koa()
|
7 |
|
8 | const merge = require('webpack-merge')
|
9 | const staticMiddleware = require('koa-static')
|
10 | const webpackMiddleware = require('koa-webpack')
|
11 | const proxy = require('koa-proxies')
|
12 | const historyFallback = require('koa2-history-api-fallback')
|
13 |
|
14 | const { resolveCwd, isPlainObject } = require('./lib/utils')
|
15 |
|
16 | const tofurc = require('../lib/get-config')()
|
17 |
|
18 | module.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 | }
|