UNPKG

ucf-scripts-test

Version:
108 lines (103 loc) 3.67 kB
/* UCF Start Services * @Author: Kvkens(yueming@yonyou.com) * @Date: 2019-01-21 13:02:27 * @Last Modified by: Kvkens * @Last Modified time: 2019-05-10 10:46:02 */ const path = require('path'); const chalk = require('chalk'); const argv = require("minimist")(process.argv.slice(2)); const commands = argv; const express = require('express'); const app = new express(); const webpack = require('webpack'); const proxy = require('http-proxy-middleware'); const OpenBrowserPlugin = require("open-browser-webpack-plugin"); const devMiddleware = require('webpack-dev-middleware'); const hotMiddleware = require('webpack-hot-middleware'); const ip = require('ip'); const getPort = require('get-port'); const util = require('./util'); const webpackConfig = require('./start.config'); const cfg = util.getUcfConfig(commands._); const compiler = webpack(webpackConfig); let host = cfg.host ? cfg.host : '0.0.0.0'; let browserHost = cfg.host ? cfg.host : '127.0.0.1'; /** * server 主程序 */ server = opt => { // 判断是否加载默认页面打开浏览器 if (commands.homepage) { compiler.apply(new OpenBrowserPlugin({ url: `http://${browserHost}:${opt.port}/${commands.homepage || ''}` })); } //静态编译 const instance = devMiddleware(compiler, { logTime: true, logLevel: commands.logLevel || "info", headers: { 'Access-Control-Allow-Origin': '*', 'Ucf-Server': util.getPkg().version }, stats: { colors: true, hash: false, children: false, chunks: false } }); cfg.static && app.use(express.static(path.resolve(".", cfg.static))); //加载实例 app.use(instance); //热更新 app.use(hotMiddleware(compiler)); //加载代理插件 //处理proxy数组情况 cfg.proxy && cfg.proxy.forEach(function (element) { if (element.enable) {//代理开启 //默认配置项 let proxyOpt = { target: element.url, logLevel: "debug", changeOrigin: true, pathRewrite: Object.assign({}, element.pathRewrite), headers: (typeof element.headers !== 'undefined' ? element.headers : {}), onProxyRes: function (proxyRes) { proxyRes.headers["Ucf-Proxy"] = "success"; } } app.use(element.router, proxy(element.opts || proxyOpt)); console.log(chalk.green(`[proxy] : ${element.router} to ${element.url}`)); } }); //运行调试服务 app.listen(opt.port, host, () => { console.log(); console.log(chalk.green(`----------------------------------------------------`)); console.log(chalk.yellow(`\t 🚀 UCF Develop Server`)); console.log(chalk.green(`\t [Server Version]: 🏅 ${util.getPkg().version}`)); console.log(chalk.green(`\t [Local] : 🏠 http://${browserHost}:${opt.port}`)); console.log(chalk.green(`\t [Lan] : 📡 http://${opt.ip}:${opt.port}`)); console.log(chalk.green(`----------------------------------------------------`)); console.log(); }); } //插件启动 module.exports = { //主程序ucf调用插件Context plugin: () => { //设置默认端口 //检测是否被占用,更换端口,启动调试服务 getPort({ port: commands.port || 3000 }).then(port => { //启动服务 server({ port, ip: ip.address() }); }); } }