实现自定义简易版脚手架

实现自定义脚手架

1.项目结构初始化

1.1项目结构目录

mycli

bin

cli.js

在终端中打开mycli文件夹 执行 npm init;
初始化完成后执行 npm link;

2.创建自定义全局指令

bin/cli.js

#! /usr/bin/env node

2.1指令处理工具 npm i commander

bin/cli.js

#! /usr/bin/env node
import { program } from "commander";
program.option('-h --help <help>','帮助');
program.command('create <project> [others...]')
        .description("创建项目")
        .alias("crt")
        .action((project,args) =>{
            console.log(project,args);
        })

2.2 安装终端交互工具

npm i inquirer
bin/cli.js

#! /usr/bin/env node
import { program } from "commander";
import inquirer from "inquirer";
program.option('-h --help <help>','帮助');
program.command('create <project> [others...]')
        .description("创建项目")
        .alias("crt")
        .action((project,args) =>{
            inquirer.prompt([{
                type: 'list',
                name:'frame';
                message:'请为项目选择框架',
                choices: ['express','egg','koa']
            }]).then((answer)=>{
                console.log(answer);
            })
        })

2.3 安装远程下载代码工具

npm i download-git-repo
bin/cli.js

#! /usr/bin/env node
import { program } from "commander";
import inquirer from "inquirer";
import download from "download-git-repo";
program.option('-h --help <help>','帮助');
program.command('create <project> [others...]')
        .description("创建项目")
        .alias("crt")
        .action((project,args) =>{
            inquirer.prompt([{
                type: 'list',
                name:'frame';
                message:'请为项目选择框架',
                choices: ['express','egg','koa']
            }]).then((answer)=>{
                console.log(answer);
                //实际使用时请将url替换成远程代码仓库地址
                download('direct:'+url,'projectName',{clone:true},(err)=>{
                    if(!err){
                        console.log("项目创建成功")
                    }
                })
            })
        })

2.4 优化代码下载状态以及终端窗口提示信息

npm i ora 代码下载状态优化工具
npm i chalk 终端窗口提示信息优化工具
bin/cli.js

#! /usr/bin/env node
import { program } from "commander";
import inquirer from "inquirer";
import download from "download-git-repo";
import ora from "ora";
import chalk from "chalk";
program.option('-h --help <help>','帮助');
program.command('create <project> [others...]')
        .description("创建项目")
        .alias("crt")
        .action((project,args) =>{
            inquirer.prompt([{
                type: 'list',
                name:'frame';
                message:'请为项目选择框架',
                choices: ['express','egg','koa']
            }]).then((answer)=>{
                console.log(answer);
                const spinner = ora().start();
                spinner.text="项目代码下载中···"
                //实际使用时请将url替换成远程代码仓库地址
                download('direct:'+url,'projectName',{clone:true},(err)=>{
                    if (!err) {
                            spinner.succeed(chalk.yellow.bold("Success!!!"));
                            console.log(
                                chalk.rgb(13, 188, 120).bold("Done "),
                                chalk.bold("you can:")
                            );
                            console.log("cd " + project);
                            console.log("nmp i");
                            console.log("npm run dev");
                            console.log("to start you project");
                    } else {
                            spinner.fail(chalk.ref("Failed"));
                    }
                })
            })
        })
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值