UNPKG

akfun

Version:

前端脚手架:支持Vue技术栈和react技术栈

200 lines (193 loc) 5.02 kB
/** * 命令式参数识别 */ const figlet = require('figlet'); // 用于输出图形文字 const yargs = require('yargs'); // 命令行工具 const chalk = require('chalk'); // 带样式的log输出 const inquirer = require('inquirer'); // 问答式交互 // 引入本地脚本模块 const akfunInit = require('./akfunInit.js'); const akfunConfigInit = require('../src/utils/akfunConfigInit.js'); const inspect = require('./inspect.js'); const mainAction = require('./main.js'); // 功能入口 // akfun的package文件 const akfunPackage = require('../package'); const titleTip = function (msg) { return chalk.green(chalk.bold(msg)); }; // 脚手架名字输出 const bigTip = figlet.textSync('AKFun', { font: 'lean', }); console.log(chalk.green(bigTip)); console.log(chalk.green(`当前版本:v${akfunPackage.version}.\n`)); let argv = yargs .command( 'init [options]', '创建一个项目', (yargs) => { yargs .reset() .usage(titleTip('Usage') + ': $0 init [options]') .option('type', { alias: 't', describe: '项目类型(vue技术栈/react技术栈/library库', }) .option('dir', { alias: 'd', describe: '项目路径', }) .option('name', { alias: 'n', describe: '项目名称', default: 'myProject', }) .alias('h', 'help'); }, (argv) => { if (argv.type && argv.dir) { akfunInit(argv.type, argv.dir, argv.name); } else { const questions = []; // 初始化项目模板时,当用户未设置项目类型type时,以列表形式展示当前可以使用的项目模板 if (!argv.type) { questions.push({ name : 'type', type : 'list', message : '请选择您要创建的项目类型: ', default : 'react', choices : [ { name : 'react项目', value : 'react', short : 'react', }, { name : 'react&ts项目', value : 'react&ts', short : 'react&ts', }, { name : 'vue项目', value : 'vue', short : 'vue', }, { name : 'library库', value : 'library', short : 'library', }, ], }); } // 当用户未设置存放项目的目录地址时,提示用户 if (!argv.dir) { questions.push({ name : 'dir', type : 'input', message : '请输入存放项目模板的目录名(默认存放在当前路径下): ', default : 'akfunProject', }); } inquirer.prompt(questions).then(ans=>{ akfunInit(ans.type, ans.dir, argv.name); }) } }, ) .command( 'config init', '初始化AKFun配置文件', (yargs) => { yargs .reset() .usage(titleTip('Usage') + ': $0 config init') .alias('h', 'help'); }, () => { akfunConfigInit('akfun.config.js'); }, ) .command( 'dev', '开启本地调试模式', (yargs) => { yargs .reset() .usage(titleTip('Usage') + ': $0 dev') .alias('h', 'help'); }, (argv) => { mainAction.dev(); }, ) .command( 'build', '构建生产环境代码', (yargs) => { yargs .reset() .usage(titleTip('Usage') + ': $0 build') .alias('h', 'help'); }, (argv) => { mainAction.build('prod'); }, ) .command( 'build2lib', '构建lib库', (yargs) => { yargs .reset() .usage(titleTip('Usage') + ': $0 build2lib') .alias('h', 'help'); }, (argv) => { mainAction.build('lib'); // 构建library }, ) .command( 'build2esm', '构建esm模块', (yargs) => { yargs .reset() .usage(titleTip('Usage') + ': $0 build2esm') .option('fileName', { alias: 'n', describe: '输出的文件名', default: '', }) .alias('h', 'help'); }, (argv) => { mainAction.build2esm(argv.fileName); // 构建esm }, ) .command( 'inspect', '输出当前配置文件', (yargs) => { yargs .reset() .usage(titleTip('Usage') + ': $0 inspect') .option('type', { alias: 't', describe: '环境类型(本地调试环境/生产环境/library构建环境)', default: 'build', }) .alias('h', 'help'); }, (argv) => { inspect(argv.type); }, ) .alias('h', 'help') .alias('v', 'version') .help() .updateStrings({ 'Usage:': titleTip('Usage:'), 'Commands:': titleTip('Commands:'), 'Options:': titleTip('Options:'), }).argv;