UNPKG

vue-docs

Version:
90 lines (74 loc) 2.43 kB
import koa from 'koa' import path from 'path' import webpack from 'webpack' import merge from 'webpack-merge' import normalWebpackConfig from './webpack.docs.conf' import webpackDevMiddleware from 'koa-webpack-dev-middleware' import webpackHotMiddleware from 'koa-webpack-hot-middleware' module.exports = function(userWebpackConfig) { let compiler, app, webpackConfig app = koa() webpackConfig = merge(normalWebpackConfig, userWebpackConfig) webpackConfig.plugins = webpackConfig.plugins || [] webpackConfig.devServer = Object.assign({}, webpackConfig.devServer, { hot: true, publicPath: webpackConfig.output.publicPath }) if (Array.isArray(webpackConfig.entry)) { webpackConfig.entry.unshift('webpack-hot-middleware/client') } else { for (let key of Object.keys(webpackConfig.entry)) { webpackConfig.entry[key].unshift('webpack-hot-middleware/client?reload=true') } } webpackConfig.plugins.unshift(new webpack.HotModuleReplacementPlugin()) webpackConfig.plugins.unshift(new webpack.NoErrorsPlugin()) compiler = webpack(webpackConfig) app.use(webpackDevServer(compiler, webpackConfig.devServer)) app.use(function * (next) { this.type = 'text/html' this.body = yield readFile(compiler, path.join(compiler.outputPath, 'index.html')) }) return { listen(port, callback) { app.listen(port, callback || function(err) { if (err) { console.log(err) return } }) } } } function webpackDevServer(compiler, devServer) { let hotOptions = { log() {} } return compose([ webpackDevMiddleware(compiler, devServer), webpackHotMiddleware(compiler, hotOptions) ]) } function compose(middleware) { return function * (next) { if (!next) { next = function * noop() {} } var i = middleware.length while (i--) { next = middleware[i].call(this, next) } return yield* next } } function * readFile(compiler, filepath) { return new Promise((resolve, reject) => { compiler.outputFileSystem.readFile(filepath, (err, result) => { if (err) { reject(err) return } resolve(result) }) }) }