dmp-cli
Version:
Dmp component's cli
104 lines (87 loc) • 3.28 kB
JavaScript
/* eslint-disable */
const path = require('path')
const fs = require('fs')
const express = require('express')
const webpack = require('webpack')
const opn = require('opn')
const proxyMiddleware = require('http-proxy-middleware')
const webpackConfig = require('../../webpack.config')
const config = require('../../config')
const log = require('../utils/log')
const app = express()
module.exports = (option) => {
log.info('预览服务启动中...')
const source = option.source
const port = option.port
// 为source目录建立符号链接,链接到dmp-cli/chartlibs
const chartlibsDir = path.resolve(__dirname, '../../chartlibs')
const linkdir = `${chartlibsDir}/chartlink`
try {
if (fs.readlinkSync(linkdir)) {
fs.unlinkSync(linkdir)
}
} catch (e) { }
fs.symlinkSync(source, linkdir, 'dir')
// proxy api requests
Object.keys(config.proxyTable).forEach((context) => {
let options = config.proxyTable[context]
if (typeof options === 'string') {
options = { target: options }
}
app.use(proxyMiddleware(options.filter || context, options))
})
try {
// babel编译source目录
if (source) {
const babelRule = webpackConfig.module.rules.find(rule => rule.loader.indexOf('babel-loader') > -1)
babelRule.include.push(source)
babelRule.exclude.push(path.resolve(source, 'node_modules'))
}
const compiler = webpack(webpackConfig)
const devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: '/',
quiet: true,
stats: {
colors: true
}
})
const hotMiddleware = require('webpack-hot-middleware')(compiler, {
log: console.log
})
// force page reload when html-webpack-plugin template changes
compiler.plugin('compilation', (compilation) => {
compilation.plugin('html-webpack-plugin-after-emit', (data, cb) => {
hotMiddleware.publish({ action: 'reload' })
cb()
})
})
// handle fallback for HTML5 history API
app.use(require('connect-history-api-fallback')())
// serve webpack bundle output
app.use(devMiddleware)
// enable hot-reload and state-preserving
// compilation error display
app.use(hotMiddleware)
// serve pure static assets
app.use('/build', express.static(path.resolve(__dirname, '../../build')))
app.use('/static/js/dll', express.static(path.resolve(__dirname, '../../build/dll/prod')))
app.use('/chartlibs', express.static(path.resolve(__dirname, '../../build/chartlibs')))
app.use('/chartsdk', express.static(path.resolve(__dirname, '../../build/chartsdk')))
app.use('/images', express.static(path.resolve(__dirname, '../../src/components/dmpsimulator/images')))
app.use('/platform', express.static(path.resolve(__dirname, '../../chartlibs/chartlink/platform')))
devMiddleware.waitUntilValid(() => {
console.log(`> Listening at http://localhost:${port}\n`)
})
app.listen(port, (err) => {
if (err) {
log.err(err)
}
})
if (!option.silent) {
opn(`http://localhost:${port}`)
log.info(`服务启动,如果浏览器还没打开,麻烦手动用chrome浏览器打开localhost:${port}`)
}
} catch (e) {
log.err(e.stack || e)
}
}