crootfast
Version:
大前端工程化命令行脚手架
100 lines (92 loc) • 3.2 kB
JavaScript
;
require("./common/alias");
console.log('run...');
const webpack = require("webpack");
const { merge } = require("webpack-merge");
// const inquirer = require("inquirer");
const WebpackDevServer = require("webpack-dev-server"); // https://github.com/webpack/webpack-dev-server/tree/master/
const colors = require("colors");
// const { setGlobal, getGlobal } = require("./common/utils/index");
const { frameConfigPath } = require("./common/utils/joinPath");
const { setGlobal, getGlobal } = require("../../common/utils/path");
// const root = getGlobal("cwd");
// const { pathJoin } = require(`${root}/common/utils/index`);
async function webpackRun() {
// 如果直接输入了对应参数,则不用询问模式,后期考虑做成可视化的启动方案。
if (process.env.npm_config_appname) {
setGlobal("appname", process.env.npm_config_appname);
}
if (process.env.npm_config_env) {
setGlobal("env", process.env.npm_config_env);
}
if (process.env.npm_config_frame) {
setGlobal("frame", process.env.npm_config_frame);
}
// 开发模式下的webpack配置
const WebpackDevelopConfig = require("./config/develop");
try {
const appname = getGlobal('appname');
const env = getGlobal('env');
const frame = getGlobal('frame');
// 加载对应框架的配置
const frameConfig = require(frameConfigPath(frame));
const compiler = webpack(merge(WebpackDevelopConfig, frameConfig));
const devServerOptions = { ...WebpackDevelopConfig["devServer"] };
const webpackServer = new WebpackDevServer(devServerOptions, compiler);
webpackServer.startCallback(async (err) => {
if (err) {
console.log(err);
}
console.log(
// merge(webpackDevelop, frameConfig),
"\n",
colors.blue(`您运行的代理环境是:${env},项目是:apps/${frame}/${appname},技术框架是:${frame}。`),
"\n",
"\n",
colors.green(`现在您可以打开地址访问您的应用了!`),
"\n"
);
// const localIPv4 = WebpackDevServer.internalIPSync('v4');
// const localPort = await WebpackDevServer.getFreePort();
});
} catch (err) {
if (err.isTtyError) {
// Prompt couldn't be rendered in the current environment
throw Error(colors.red("Prompt couldn't be rendered in the current environment: " + err));
} else {
// Something else went wrong
throw Error(colors.red("Something else went wrong: " + err));
}
}
};
webpackRun();
// async function inquirerPrompt() {
// return await inquirer.prompt([
// {
// type: "list",
// message: "请选择你使用的框架",
// name: "Frame",
// default: "react",
// choices: [
// "react"
// ]
// },
// {
// type: "input",
// message: "请输入项目,例如:demo;",
// name: "Project",
// default: "demo"
// },
// {
// type: "list",
// message: "请选择依赖的服务器环境",
// name: "ProxyEnv",
// default: "test",
// choices: [
// "test",
// "stating",
// "production"
// ]
// }
// ]);
// };