You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
import Koa from 'koa'
|
|
import convert from 'koa-convert'
|
|
import webpack from 'webpack'
|
|
import webpackConfig from '../build/webpack.config'
|
|
import historyApiFallback from 'koa-connect-history-api-fallback'
|
|
import serve from 'koa-static'
|
|
import proxy from 'koa-proxy'
|
|
import _debug from 'debug'
|
|
import config from '../config'
|
|
import webpackDevMiddleware from './middleware/webpack-dev'
|
|
import webpackHMRMiddleware from './middleware/webpack-hmr'
|
|
|
|
const debug = _debug('app:server')
|
|
const paths = config.utils_paths
|
|
const app = new Koa()
|
|
|
|
// Enable koa-proxy if it has been enabled in the config.
|
|
if (config.proxy && config.proxy.enabled) {
|
|
app.use(convert(proxy(config.proxy.options)))
|
|
}
|
|
|
|
// This rewrites all routes requests to the root /index.html file
|
|
// (ignoring file requests). If you want to implement isomorphic
|
|
// rendering, you'll want to remove this middleware.
|
|
app.use(convert(historyApiFallback({
|
|
verbose: false
|
|
})))
|
|
|
|
// ------------------------------------
|
|
// Apply Webpack HMR Middleware
|
|
// ------------------------------------
|
|
if (config.env === 'development') {
|
|
const compiler = webpack(webpackConfig)
|
|
|
|
// Enable webpack-dev and webpack-hot middleware
|
|
const { publicPath } = webpackConfig.output
|
|
|
|
app.use(webpackDevMiddleware(compiler, publicPath))
|
|
app.use(webpackHMRMiddleware(compiler))
|
|
|
|
// Serve static assets from ~/src/static since Webpack is unaware of
|
|
// these files. This middleware doesn't need to be enabled outside
|
|
// of development since this directory will be copied into ~/dist
|
|
// when the application is compiled.
|
|
app.use(serve(paths.client('static')))
|
|
} else {
|
|
debug(
|
|
'Server is being run outside of live development mode, meaning it will ' +
|
|
'only serve the compiled application bundle in ~/dist. Generally you ' +
|
|
'do not need an application server for this and can instead use a web ' +
|
|
'server such as nginx to serve your static files. See the "deployment" ' +
|
|
'section in the README for more information on deployment strategies.'
|
|
)
|
|
|
|
// Serving ~/dist by default. Ideally these files should be served by
|
|
// the web server and not the app server, but this helps to demo the
|
|
// server in production.
|
|
app.use(serve(paths.dist()))
|
|
}
|
|
|
|
export default app
|