前言

CLI,全称是command-line interface,也就是命令行交互接口。无论是在前端还是后端,都可以用于在构建时通过命令快速生成项目或模板等。Node.js作为最热的开发工具之一,如何用它来开发命令行程序,是一个web开发者应该学习掌握的。

那么如何构建属于自己的CLI工具呢,在项目开发时可以快速生成自己需要的代码模板,去除重复工作,并且还可以为其他的开发者提供快速入门的使用呢?本文教程详细地讲解了这些步骤,让你一步一步搭建出一个属于自己的CLI工具。

准备工作

npm adduser yourusername
npm whoami
  • 编写你的模板文件,并上传至Github
  • 编写入口文件package.json
"bin": {
    "huxinmin": "./bin/huxinmin.js"
}

工具

  • commander
    node.js命令行接口的完全解决方案,受启发于Ruby的commander。
  • git-clone
    git-clone是一个很轻量的Node编写的git clone封装,可以很便捷很快速地从github上克隆执行项目模板。也就是说,我们将项目模板静态存储在github上,每当执行cli命令时,将其下载,这样我们就很轻松地得到了项目代码模板。另外,当需要改变项目模板代码时,只需要修改github上的项目代码就可以,cli工具无需修改
  • shelljs
    shelljs同样是一个很轻量的Node编写的系统命令封装,可以很便捷很快速地在Node代码中使用系统命令。在本例中,因为从github上下载的项目代码会带有.git文件,需要使用rm命令将其删除
  • tracer
    一个强大高度自定义化的打印输出库
  • chalk
    终端文字输出颜色样式自定义库
  • co-prompt
    传统的命令行只能单行一次性地输入所有参数和选项,使用这个工具可以自动提供提示信息,并且分步接收用户的输入,体验类似npm init时的一步一步输入参数的过程
  • progress
    渲染 ACSII 进度条

构建

如下是huxinmin.js的代码:

#!/usr/bin/env node
var clone = require('git-clone')
var program = require('commander')
var shell = require('shelljs');
var log = require('tracer').colorConsole()
program
    .version('1.0.0')
    .description('我的第一个nodejs cli模板生成器')
program
    .command('* <project>')
    .action(function(project) {
        log.info('使用例子:createMyFirstNodeCliTemplate myproject')
        if (project) {
            let pwd = shell.pwd()
            log.info(`正在拉取模板代码,下载位置:${pwd}/${project}/ ...`)
            clone(`https://github.com/huxinmin/createMyFirstNodeCliTemplate.git`, pwd + `/${project}`, null, function() {
                shell.rm('-rf', pwd + `/${project}/.git`)
                log.info('模板工程建立完成')
            })
        } else {
            log.error('正确命令例子:createMyFirstNodeCliTemplate myproject')
        }
    })
program.parse(process.argv)

如果想要不安装直接使用的话,可以输入

npm link

脚本解释程序:

#! /usr/bin/env node

在代码的开头第一行,必须指定我们的脚本执行所需要的解释程序。在这里,我们使用node来作为脚本的解释程序。而我们#! /usr/bin/env node这样写,目的是使用env来找到node,并使用node来作为程序的解释程序。

发布并使用

使用NPM发布

npm publish

如果发布失败,可能是因为设置了镜像源,只要设置回去就好了:

npm config set registry https://registry.npmjs.org/

安装

npm install createMyFirstNodeCliTemplate -g

使用

createMyFirstNodeCliTemplate myproject

其他教程