摘要: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频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号