UNPKG

dio-cli

Version:

CLI for scaffolding dio-cli projects , 前端项目, 构建工具

84 lines (68 loc) 2.39 kB
require("./lib/check-versions")(); const proc = require("child_process"); const ora = require("ora"); const Koa = require("koa"); const app = new Koa(); const merge = require("webpack-merge"); const staticMiddleware = require("koa-static"); const webpackMiddleware = require("koa-webpack"); const proxy = require("koa-proxies"); const historyFallback = require("koa2-history-api-fallback"); const { resolveCwd, isPlainObject } = require("./lib/utils"); // 获取模板配置 const tofurc = require("../lib/get-config")(); // 获取项目配置 const dioConfig = require("../lib/get-dioconfig")(); module.exports = (port, peace) => { let webpackConfig = require("./webpack.dev"); // 支持 webpackConfig 在 .diofurc.js 里进行配置 if (tofurc && tofurc.webpack && isPlainObject(tofurc.webpack)) { webpackConfig = merge(webpackConfig, tofurc.webpack); } if (peace) { webpackConfig.module.rules.shift(); } const config = require("./config").dev; const webpack = require("webpack"); const compiler = webpack(webpackConfig); const staticPath = resolveCwd(config.assetsPublicPath); app.use(staticMiddleware(staticPath)); app.use(historyFallback()); const webpackMiddlewareInstance = webpackMiddleware({ compiler, hot: { log: false }, dev: { quiet: true, publicPath: webpackConfig.output.publicPath } }); app.use(webpackMiddlewareInstance); // dio - config 代理 if (dioConfig && dioConfig.isProxy) { const proxyTable = dioConfig.proxy; Object.keys(proxyTable).forEach(path => { app.use(proxy(path, proxyTable[path])); }); } // --- const spinner = new ora("等待 webpack 打包完成..."); spinner.start(); port = port || (dioConfig && dioConfig.port) || 8080; const host = (dioConfig && dioConfig.href) || "localhost"; const url = `http://${host}:${port}`; console.log(url); app.listen(port); webpackMiddlewareInstance.dev.waitUntilValid(() => { spinner.stop(); if (tofurc._meta.type === "electron") { const child = proc.spawn(process.platform === "win32" ? "npm.cmd" : "npm", ["run", "dev"], { stdio: "inherit" }); child.on("close", function(code) { process.exit(code); }); } else { require("opn")(url); } }); };