Node.js开发指南 命令行小工具开发浅析
沉沙 2018-06-27 来源 : 阅读 591 评论 0

摘要:Node.js有许多命令行工具。它们全局安装,并提供一个命令供我们使用,完成相应的功能。 希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

NodeJs有许多命令行工具。它们全局安装,并提供一个命令供我们使用,完成相应的功能。 现在我们就用node来开发一个实用的命令行小工具

一.初探

一个最简单的命令行工具

1.首先我们新建一目录,然后执行npm init生成package.json文件

2.新建一bin目录并在目录下创建一个hi.js

#! /usr/bin/env nodeconsole.log("hi")

执行node hi.js我们可以看到终端输出‘hi’。。当然这并不是我们要的命令行工具,我们需要直接运行hi就可出现结果

3.现在我们告诉npm可执行文件是哪个,在package.json里添加如下信息:

 "bin": {
    "hi": "bin/hi.js"
  }
npm link

现在我们执行npm link启用命令行,现在再试试在终端直接输入hi命令,这次我们可以如愿见到结果

处理参数

命令行参数可通过系统变量process.argv获取。 process.argv返回一个数组 第一个是node 第二个是脚本文件 第三个是输入的参数,process.argv[2]开始得到才是真正的参数部分

  #! /usr/bin/env node
let argv = process.argv.slice(2)let yourName = argv[0]console.log(`hi, ${yourName}!`)
// 执行 hi liu// hi, liu!
Commander.js

对于参数处理,我们一般使用commander,commander是一个轻巧的nodejs模块,提供了用户命令行输入和参数解析强大功能如:自记录代码、自动生成帮助、合并短参数(“ABC”==“-A-B-C”)、默认选项、强制选项、命令解析、提示符

 $ npm install commander --save
#!/usr/bin/env node
/**
 * Module dependencies.
 */
var program = require('commander')
 
program
  .version('0.0.1')
  .option('-p, --peppers', 'Add peppers')
  .option('-P, --pineapple', 'Add pineapple')
  .option('-b, --bbq-sauce', 'Add bbq sauce')
  .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
  .parse(process.argv)
console.log('you ordered a pizza with:')if (program.peppers) console.log('  - peppers')if (program.pineapple) console.log('  - pineapple')if (program.bbqSauce) console.log('  - bbq')console.log('  - %s cheese', program.cheese)

Commander API

· Option(): 初始化自定义参数对象,设置“关键字”和“描述”

· Command(): 初始化命令行参数对象,直接获得命令行输入

· Command#command(): 定义一个命令名字

· Command#action(): 注册一个callback函数

· Command#option(): 定义参数,需要设置“关键字”和“描述”,关键字包括“简写”和“全写”两部分,以”,”,”|”,”空格”做分隔。

· Command#parse(): 解析命令行参数argv

· Command#description(): 设置description值

· Command#usage(): 设置usage值

· 更多参考 commander官网

除了commander外,yargs也是一个优秀的命令行参数处理模块


二.开发命令行翻译工具

1.新建并初始化项目

新建 文件夹translator/进入目录下执行npm init 生成package.json文件

npm install commander superagent cli-table2 --save

· cli-table2命令行表格输出

· superagent用于http请求

新建bin/translator.js文件,并加入package.json文件中

 "bin": {

    "translator": "bin/translator.js"

  },

然后

npm link

这里我们会用到有道API 一切准备就绪我们就可以进行编码了

2.coding

由于代码量很小,这里就直接贴代码,在代码中以注释讲解

#! /usr/bin/env node// 引入需要的模块const program = require('commander')const Table = require('cli-table2') // 表格输出const superagent = require('superagent') // http请求// 初始化commander
program
    .allowUnknownOption()
    .version('0.0.1')
    .usage('translator <cmd> [input]')
// 有道apiconst API = '//fanyi.youdao.com/openapi.do?keyfrom=toaijf&key=868480929&type=data&doctype=json&version=1.1'
// 添加自定义命令
program
    .command('query')
    .description('翻译输入')
    .action(function(word) {
        // 发起请求
        superagent.get(API)
        .query({ q: word})
        .end(function (err, res) {
            if(err){
                console.log('excuse me, try again')
                return false
            }
            let data = JSON.parse(res.text)
            let result = {}
 
            // 返回的数据处理
            if(data.basic){
                result[word] = data['basic']['explains']
            }else if(data.translation){
                result[word] = data['translation']
            }else {
                console.error('error')
            }
 
            // 输出表格
            let table = new Table()
            table.push(result)
            console.log(table.toString())
        })
    })
// 没有参数时显示帮助信息if (!process.argv[2]) {
    program.help();
    console.log();
}
 
program.parse(process.argv)

现在在终端中愉快的使用translator了

$ translatorUsage:  translator <cmd> [input]

  Commands:

    query   翻译输入

  Options:

    -h, --help     output usage information

    -V, --version  output the version number


本文由职坐标整理发布,学习更多的Node.js相关知识,请关注职坐标WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程