0.0.1 • Published 5 months ago

burt-cli v0.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
5 months ago

commander: 要解析用户的参数

const program = rquire('commander');
// 解析用户传递过来的参数
program.parse(process.argv);
// 版本号
program.version(pkg.version);
  1. 定义全局选项 使用option()定义全局选项,可以定义多个全局选项。第一个参数为选项的名称和别名,需要使用空格来分割。第二个参数为该选项的描述信息。第三个参数为选项默认值。
program
  .option("-d, --debug", "是否开启调试模式", false)
  // -e/--env后跟的字符,将存到envName属性中
  .option("-e, --envName <envName>", "获取环境变量名称", 'production');
  1. 获取选项键值对 使用opts()获取解析命令行参数后的选项键值对,属性名为选项的长标识
const opts = program.opts();
console.log(opts) // => {debug: false, envName: 'production'}
  1. 定义命令
  • 方式一:使用command()注册命令,<> 表示该参数是必须的。 description()定义该命令的描述信息。 alias()定义该命令的别名。 option()定义该命令的选项,用法与全局选项一致。 action()定义该命令要做的事情。
const clone = program.command("clone <source>");
clone
  // 命令描述
  .description("command clone")
  // 别名
  .alias("c")
  // 命令的选项
  .option("-f --force", "是否强制克隆", false)
  // 要做的事
  .action((source, cmdObj) => {
  // cmdObj-命令行键值对
  // mock-项目是否已克隆
  const cloned = true;
  if (cloned) {
    // 强制覆盖
    if (cmdObj.force) {
      console.log("项目已克隆,将强制覆盖");
      handleClone(source)
    } else {
      console.log("克隆失败!该项目已克隆");
    }
  } else {
    handleClone(source)
  }
});
function handleClone(source) {
  console.log("cloning...");
  console.log(`cloneSource is ${source}`);
  console.log("opts:", program.opts());
}
  • 方式二:使用addCommand()注册子命令 先定义一个Command对象,然后定义该对象的子命令。最后使用program.addCommand() 将该命令加入到主命令中
const service = new commander.Command("service");
service
.command("start [port]")
.description("start a new service at some port")
.action((port) => {
console.log("do service start", port);
});
service
.command("stop")
.description("stop service")
.action(() => {
console.log("stop service");
});
program.addCommand(service);
  1. 监听用户输入--help事件
program.on('--help', () => {
  console.log('哈哈哈')
})

拉取你自己的所有项目列出来,让用户选,安装哪个项目,选完后再列出来所有的版本号,可能还需要用户配置一些数据来结合渲染我的项目

  1. developer.github.com/v3/ 文档
// 获取组织下的仓库
// 例如:https://api.github.com/orgs/zhu-cli/repos
// 获取某一个项目的所有版本号
// 例如:https://api.github.com/repos/zhu-cli/vue-simple-template/tags


const axios = require('axios');

// 获取项目列表
const fetchRepoList = async () => {
  const { data } = await axios.get('https://api.github.com/orgs/zhu-cli/repos');
  return data;
}

// 在获取之前 显示loading 关闭loading
// ora 插件
const ora = require('ora')
const spinner = ora('加载中...')
spinner.start() // 开始

spinner.succeed() // 完成
  1. 下载仓库插件:download-git-repo
const { promisify } = require('utils')
let downloadGitRepo = require('download-git-repo')
downloadGitRepo = promisify(downloadGitRepo) // 将downloadGitRepo转换为promise对象

// 下载仓库 repo:仓库名 tag:版本号
const download = async (repo, tag) => {
  let api = `zhu-cli/${repo}`;
  if(tag){
    api += `#${tag}`;
  }
  downloadGitRepo(api, '项目名称')
}
  1. 拷贝目录文件插件 ncp
let ncp = require('ncp')
ncp(result, path.resolve(projectName))