1
1
mirror of https://github.com/c8r/x0.git synced 2024-09-11 13:45:52 +03:00
x0/lib/dev.js

74 lines
1.7 KiB
JavaScript
Raw Normal View History

2018-05-20 00:06:12 +03:00
const path = require('path')
const webpack = require('webpack')
const serve = require('webpack-serve')
const history = require('connect-history-api-fallback')
const convert = require('koa-connect')
const MiniHTMLWebpackPlugin = require('mini-html-webpack-plugin')
const merge = require('webpack-merge')
const baseConfig = require('./config')
const createTemplate = require('./createTemplate')
const dev = {
hot: true,
logLevel: 'error',
clientLogLevel: 'none',
stats: 'errors-only'
}
module.exports = async (opts) => {
const config = merge(baseConfig, opts.webpack)
const template = createTemplate(opts)
config.mode = 'development'
2018-05-20 22:59:08 +03:00
config.context = opts.dirname
2018-05-20 00:06:12 +03:00
config.entry = path.join(__dirname, './entry')
config.output= {
path: path.join(process.cwd(), 'dev'),
filename: 'dev.js',
publicPath: '/'
}
config.resolve.modules.unshift(
opts.dirname,
path.join(opts.dirname, 'node_modules')
)
config.plugins.push(
new webpack.DefinePlugin({
DEV: JSON.stringify(true),
OPTIONS: JSON.stringify(opts),
DIRNAME: JSON.stringify(opts.dirname),
2018-05-20 21:44:30 +03:00
APP: JSON.stringify(opts.app),
2018-05-20 00:06:12 +03:00
})
)
config.plugins.push(
new MiniHTMLWebpackPlugin({
context: opts,
template
})
)
const serveOpts = {
config,
dev,
logLevel: 'error',
port: opts.port,
hot: { logLevel: 'error' },
add: (app, middleware, options) => {
app.use(convert(history({})))
}
}
return new Promise((resolve, reject) => {
serve(serveOpts)
.then(server => {
server.compiler.hooks.done.tap({ name: 'x0' }, () => {
resolve(server)
})
})
.catch(reject)
})
}