UNPKG

cgreact-cli

Version:

CGReact脚手架工具项目:增加SpliteCommonChunk的配置

321 lines (320 loc) 14 kB
#! node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var FS = require("fs"); var Path = require("path"); var chalk = require("chalk"); var inquirer = require("inquirer"); var commander_1 = require("commander"); var child_process_1 = require("child_process"); var rootDir = Path.parse(__dirname).dir; var PackageJson = JSON.parse(FS.readFileSync(Path.join(rootDir, "package.json"), "utf-8")); var Logo = chalk.yellow(require("figlet").textSync('CGReact', { horizontalLayout: 'full', })); var Version = chalk.red(" V" + PackageJson.version); var Creator = " Create by " + chalk.cyan("chenguang@ciotc.org") + " on " + chalk.yellow("2021-07-22"); var Company = " Copyright @ " + chalk.blue('江苏中科西北星信息科技有限公司') + " " + chalk.blue('http://www.zkxbx.com/'); var MoreInfo = " \u66F4\u591A\u5185\u5BB9\u656C\u8BF7\u5173\u6CE8 " + chalk.blue('https://www.zkxbx.com'); var MainCommandHandler; var InitAppCommandHandler; var HelpFlag = process.argv.some(function (cur) { return cur == "-h" || cur == "--help"; }); (function main(argv) { mainCommand(); initCommand(); MainCommandHandler.parse(argv); })(process.argv); function mainCommand() { MainCommandHandler = new commander_1.Command().description('CGReact脚手架工具').option('-v, --version', '展示CGReact的当前版本') .option('-h, --help', '展示"cgreact"命令的帮助信息').action(function (option) { if (option.help || option.version || Object.keys(option).length == 0) { console.log(Logo + Version); if (option.help || Object.keys(option).length == 0) { MainCommandHandler.outputHelp(); } if (option.version || Object.keys(option).length == 0) { console.log(); console.log(Creator); console.log(Company); console.log(MoreInfo); } } }); } function initCommand() { InitAppCommandHandler = MainCommandHandler.command('init [app-name]').description('创建一个新的CGReact项目') .option('-f, --force', '如果文件存在则覆盖原来的文件(请谨慎操作!)').option('-h, --help', '展示"cgreact init"命令的帮助信息') .action(function (appName, option, command) { HelpFlag && (option.help = true); if (option.help) { console.log(Logo + Version); InitAppCommandHandler.outputHelp(); console.log(); console.log("app-name: 任意字符串作为项目名称(不传init的时候也会问)"); console.log(); return; } askAppConfig(appName, option.force); }); } function askAppConfig(appName, force) { var appConfig = {}; appConfig.force = force; inquirer.prompt([ { name: 'author', type: 'input', message: '尊姓大名:', validate: function (value) { if (value.length) { return true; } else { return '您能输入一个人名吗:'; } } } ]).then(function (result) { appConfig.author = result.author; console.log(chalk.green(result.author + ",欢迎你使用CGReact")); console.log(); return inquirer.prompt([ { name: 'name', type: 'input', default: appName, message: '输入项目名称' + chalk.gray('(例: Hello): '), validate: function (value) { if (value.length) { return true; } else { return '请输入您项目的名称:'; } } } ]); }).then(function (result) { appConfig.name = result.name; console.log(chalk.green("您的项目名称是:" + result.name)); console.log(); return inquirer.prompt([ { name: 'nodeName', type: 'input', default: "TestProject", message: '输入node包的名称(注意不能包含中文)' + chalk.gray('(例: Test_Project): '), validate: function (value) { if (value.length && !/.*[\u4e00-\u9fa5]+.*$/.test(value)) { return true; } else { return '请输入不包含中文的node文件名称:'; } } } ]); }).then(function (result) { appConfig.nodeName = result.nodeName; console.log(chalk.green("您的node包名称是:" + result.nodeName)); console.log(); return inquirer.prompt([ { name: 'description', type: 'input', default: appName, message: '输入项目描述' + chalk.gray('(例: 测试程序一枚): '), validate: function (value) { if (value.length) { return true; } else { return '请输入您项目的描述:'; } } } ]); }).then(function (result) { appConfig.description = result.description; console.log(chalk.green("这个项目是:" + result.description)); console.log(); return inquirer.prompt([ { name: 'layui', type: 'list', message: '是否安装CGReact基于Layui的组件库cgreact-layui?: ', choices: ["不了,我想自己引入样式和组件", "是的,我想使用CGReactLayui组件库"] } ]); }).then(function (result) { if (result.layui == "不了,我想自己引入样式和组件") { appConfig.layui = false; console.log(chalk.green("不使用CGReactLayui组件库")); } else { appConfig.layui = true; console.log(chalk.green("使用CGReactLayui组件库")); } console.log(); return inquirer.prompt([ { name: 'server', type: 'confirm', message: '是否集成后台服务: ' } ]); }).then(function (result) { appConfig.server = result.server; console.log(chalk.green((result.server ? "" : "不") + "集成Maven和SpringBoot后台")); console.log(); console.log(chalk.cyan("我们正在为您创建文件,请耐心等待....")); if (makeAppDir(appConfig)) { makePackageJSON(appConfig); copyWebAppFile(appConfig); console.log(chalk.green("项目文件创建好啦!")); console.log(); return inquirer.prompt([ { name: 'install', type: 'list', message: '让CGReactCli帮你安装一下子?: ', choices: ["好的,马上安装", "不用了,我自己'npm install'"] } ]); } }).then(function (result) { if (result.install == "好的,马上安装") { appConfig.install = true; console.log(chalk.cyan("开始安装工程编译依赖包:")); return new Promise(function (resolve, reject) { var install = child_process_1.spawn('npm.cmd', ['install'], { stdio: "inherit", cwd: appConfig.name }); install.on("close", function (code) { if (code == 0) { console.log(chalk.green("工程编译依赖包安装好啦!")); console.log(); resolve(true); } else { console.log(); console.log(chalk.red("哎呀呀,安装工程依赖失败了,检查一下你的Node环境配置是否正确?")); } }); }).then(function (result) { console.log(chalk.cyan("继续安装CGReact核心库cgreact-core:")); return new Promise(function (resolve, reject) { var install = child_process_1.spawn('npm.cmd', ['install', 'cgreact-core'], { stdio: "inherit", cwd: appConfig.name }); install.on("close", function (code) { if (code == 0) { console.log(chalk.green("CGReact核心包cgrect-core安装好啦!")); console.log(); resolve(true); } else { console.log(); console.log(chalk.red("哎呀呀,核心库cgeract-core安装失败了,请与管理员cheng@ciotc.org联系!")); } }); }); }).then(function (result) { if (appConfig.layui) { console.log(chalk.cyan("继续安装CGReact组件库cgreact-layui:")); return new Promise(function (resolve, reject) { var install = child_process_1.spawn('npm.cmd', ['install', 'cgreact-layui'], { stdio: "inherit", cwd: appConfig.name }); install.on("close", function (code) { if (code == 0) { resolve(true); } else { console.log(); console.log(chalk.red("哎呀呀,组件库cgeract-layui安装失败了,请与管理员cheng@ciotc.org联系!")); } }); }); } else { return true; } }); } else { console.log(chalk.green("好的,那就麻烦您自己用'npm install'来安装工程依赖!")); return new Promise(function () { return undefined; }); } }).then(function (result) { return inquirer.prompt([ { name: 'start', type: 'list', message: '让CGReactCli帮你启动起来吧?: ', choices: ["好的", "不用了,我自己'npm run debug'来启动"] } ]); }).then(function (result) { if (result.start == "好的") { child_process_1.spawn('npm.cmd', ['run', 'debug'], { stdio: "inherit", cwd: appConfig.name }); } else { console.log(chalk.green("好的,那就麻烦您自己用'npm run debug'来启动啦!")); } }).catch(function (error) { }); } function makeAppDir(config) { var dirExist = FS.existsSync(config.name); if (dirExist && !config.force) { var error = chalk.red("指定的文件夹'" + config.name + "'已经存在,尝试使用-f参数强制创建app"); console.log(error); return false; } dirExist && (FS.rmdirSync(config.name, { recursive: true })); FS.mkdirSync(config.name); return true; } function makePackageJSON(config) { var packString = FS.readFileSync(Path.join(rootDir, "template/package.json"), "utf-8"); var packJSON = JSON.parse(packString); packJSON.name = config.nodeName; packJSON.author = config.author; packJSON.description = config.description; packJSON.dependencies = {}; packJSON.dependencies["cgreact-core"] = "latest"; config.layui && (packJSON.dependencies["cgreact-layui"] = "latest"); FS.writeFileSync(Path.join(config.name, "package.json"), JSON.stringify(packJSON), "utf-8"); } function copyWebAppFile(config) { var target = { "tsconfig.json": Path.join(rootDir, "template/tsconfig.json"), "webpack.config.ts": Path.join(rootDir, "template/webpack.config.ts"), "src/web/assets/img/cgreact.svg": Path.join(rootDir, "template/src/web/assets/img/cgreact.svg"), "src/web/page-cgreact/page-cgreact.css": Path.join(rootDir, "template/src/web/page-cgreact/page-cgreact.css"), "src/web/page-cgreact/page-cgreact.tsx": Path.join(rootDir, "template/src/web/page-cgreact/page-cgreact.tsx"), "src/web/page-my/page-my.css": Path.join(rootDir, "template/src/web/page-my/page-my.css"), "src/web/page-my/page-my.tsx": Path.join(rootDir, "template/src/web/page-my/page-my.tsx"), "src/web/main.tsx": Path.join(rootDir, "template/src/web/main.tsx") }; Object.keys(target).map(function (name) { var file = FS.readFileSync(target[name], "utf-8"); var make = []; var targetDir = Path.parse(Path.join(config.name, name)).dir; while (targetDir) { (!FS.existsSync(targetDir)) && (make.push(targetDir)); targetDir = Path.parse(targetDir).dir; } while (make.length > 0) { FS.mkdirSync(make.pop()); } FS.writeFileSync(Path.join(config.name, name), file, "utf-8"); }); }