资讯专栏INFORMATION COLUMN

node命令行小工具开发【翻译小工具】

Yang_River / 1444人阅读

摘要:命令行工具开发有许多命令行工具。现在我们就用来开发一个实用的命令行小工具一初探一个最简单的命令行工具首先我们新建一目录,然后执行生成文件新建一目录并在目录下创建一个执行我们可以看到终端输出。。

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

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

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

#! /usr/bin/env node
console.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  [input]")

// 有道api
const API = "http://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

$ translator
Usage:  translator  [input]
  Commands:
    query   翻译输入
  Options:
    -h, --help     output usage information
    -V, --version  output the version number
三.小结

了解nodeJs 可执行脚步

了解命令行参数解析

了解commander,cli-table2,superagent等第三方模块

抛砖引玉,更多请参考各个模块的官方示例及API文档

相关链接

CommanderJs

cli-table2

superagent

Node.js 命令行程序开发教程-阮一峰

Commander写自己的Nodejs命令-粉丝日志

原文链接:xingxin.me

大家可以关注我的公众号,一起玩耍。有技术干货也有扯淡乱谈,关注回复[888]领取福利

左手代码右手砖,抛砖引玉

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82046.html

相关文章

  • 开发一个Node命令玩具全过程--高颜统计工具

    摘要:相信熟悉系统的,对于一些等命令用起来应该爱不释手,这也是我想要开发一个便捷命令行的初衷,其次就是记录一个完整开源小玩具的全过程。 背景 命令行工具对于我们来说非常的熟悉,一些命令行的操作也极大的简化了我们的日常工作。本文就基于我写的一个Node命令行代码计数器来进行展开。 相信熟悉linux系统的,对于一些ps,grep,cp,mv…等命令用起来应该爱不释手,这也是我想要开发一个便捷命...

    ytwman 评论0 收藏0
  • Node命令工具开发【看段子工具

    摘要:我们的小项目就初始化成功了,就可以认真思考代码了首先分析糗事百科我们打开糗事百科会发现它的还是很简单,由于我们只是爬取段子所以如下,就是页数。 Node命令行工具开发【看段子】 你有没有上班想看笑话却又怕领导发现的经历?现在我们就用几十行代码写一个命令行看笑话段子的小程序,从此无需担心领导的视察。这篇文章和上一篇差不多都是命令行小工具开发,不过本篇更偏向于小爬虫的开发 总览:命令行看段...

    kelvinlee 评论0 收藏0
  • 线上出bug了?别怕,这么定位!

    摘要:由于现在构建工具盛行,前端部署的代码都是经过编译,压缩后的,于是乎,就扮演了一个十分重要的角色,用来作为源代码和编译代码之间的映射,方便定位问题。源代码的标识,如果无法获取,返回。 摘要: Source Map还是很神奇的。 原文:线上出bug了?别怕,这么定位! 公众号:前端小苑 Fundebug经授权转载并修改,版权归原作者所有。 工作中,生产环境代码是编译后代码,搜集到报错...

    greatwhole 评论0 收藏0

发表评论

0条评论

Yang_River

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<