UNPKG

dmp-cli

Version:

Dmp component's cli

104 lines (87 loc) 3.28 kB
/* 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) } }