使用node构建简单的cli工具

代码
1、在package.json中增加
{
  "name": "test",
  "version": "1.0.0",
  "bin": {
      "kkb": "./bin/kkb.js"
   },
   ...
}
2、终端中执行
kkb init mytest
3、具体的代码

kkb.js

#!/usr/bin/env node
// 指定解释器

// node.js命令行界面的完整解决方案
const program = require("commander")

// 指定版本号
program.version(require("../package.json").version)

// 增加初始化命令
program.command("init <name>").description('init project').action(require("../lib/init"))

program.parse(process.argv)

init.js

// Node8 就提供了 util.promisify() 这个方法,方便我们快捷的把原来的异步回调方法改成返回 Promise 实例的方法
const {promisify} = require("util")
// 「FIGlet」是基于ASCII字符组成的字符画
const figlet = promisify(require("figlet"))
const clear = require("clear")
//node终端样式库
const chalk = require("chalk")
const log = content => console.log(chalk.green(content))
const clone = require("./download") 
const open = require("open")
const spawn = async (...args) => {
    // child_process 模块提供了衍生子进程(以一种与 popen(3) 类似但不相同的方式)的能力
    const {spawn} = require("child_process")
    return new Promise(resolve => {
        const proc = spawn(...args)
        proc.stdout.pipe(process.stdout)
        proc.stderr.pipe(process.stderr)
        proc.on("close", () => {
            resolve();
        })
    })
}
module.exports = async name => {
    // 打印欢迎页
    clear()
    const data = await figlet('kkb welcome')
    log(data)

    // 下载项目
    log(`🚀创建项目: ${name}`)
    await clone ("github:su37josephxia/vue-sample", name)

    // 自动安装依赖
    log(`🚀安装依赖`)
    await spawn("cnpm", [install], {cwd: `./${name}`})
    log(`🚀安装完成`)

    // 打开浏览器
    open(`http://localhost:8080`)
    //自动启动
    await spawn("npm", ["run", "serve"], {cwd: `./${name}`})

}

download.js

const {promisify} = require("util")
module.exports = async function (repo, desc) {
    // 从git下载文件
    const download = promisify(require('download-git-repo'))
    // 下载进度条
    const ora = require("ora")
    const progress = ora(`下载...${repo}`)
    process.start()
    await download(repo, desc)
    process.succeed()

}

库讲解
1、FIGlet是基于ASCII字符组成的字符画。

FIGlet

2、child_process的使用

child_process

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值