博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
"irest" 一个 nodejs 命令行工具的制作过程
阅读量:7109 次
发布时间:2019-06-28

本文共 11191 字,大约阅读时间需要 37 分钟。

为什么是 irest

临近年末,多出了一些空余时间,突发奇想想做一个用来"休闲"的命令行工具,刚开始的时候想用python,后来决定了用nodejs实践一下 , 项目GitHub地址 欢迎 !!start!!

功能分析

初步计划,实现以下几个功能

  • 查看天气
  • 看笑话
  • 看新闻
  • 搜索浏览图片

动手开始做

初始化项目

首先建立文件夹 irest cd 到文件夹里面,使用 npm init 初始化 package.json

目录结构

|- irest        |- bin // 放置命令行操作的文件夹        |- config // 存放配置文件        |- module // 存放自己实现的模块        |- tool // 自己要使用到的工具        |- package.json        |- README.MD

操作命令行

我是用的 commander 包来操作获取命令行输入的,很方便,api介绍也很详细

首先在 bin 下面创建 irest 文件,这里的文件我没有写后缀
然后在 package.json 里面添加

"bin": {        "irest": "bin/irest"    }

bin/irest

#!/usr/bin/env noderequire('commander')  .version(require('../package').version)  .usage(' [options]')  .command('news', '看今天的头条新闻')  .command('joke', '来条笑话')  .command('weather [arguments]', '看看今天的天气')  .command('image [arguments]', '搜张图片看看')  .parse(process.argv)

可能你会注意到头部那句注释了,这个注释目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,后面的是输出帮助

运行 node bin/irest 输出下面这句话就说明成功了

news                 看今天的头条新闻    joke                 来条笑话    weather [arguments]  看看今天的天气    image [arguments]    搜张图片看看    help [cmd]           display help for [cmd]

实现新闻模块

bin 下面建立 irest-news 文件,因为当用户输入 irest news 的时候,会找到 irest-news 文件并执行

bin/irest-news

#!/usr/bin/env nodeconst program = require('commander')const news = require('../module/news')program  .usage(' [options]')  .parse(process.argv)let template = program.args // 获取用户 irest news xxx  后面的参数news.consoleNews();

新闻模块的功能是靠 superagent 爬取网页代码, 然后用 cheerio 解析代码,之后可以通过类似于jquery 的操作方法去获取新闻

module/news.js

let Bower = require('./bower')let config = require('../config/index').newslet tool = require('../tool/index')let cheerio = require('cheerio');  class News{    constructor(){        this.bower = new Bower();    }    getNews(){        this.bower.openPage(            config.url,            data=>{                var $=cheerio.load(data);                var list = $(config.page.listName);                console.log('+------------------------------------------------------------+')                list.each((key, value)=>{                    console.log('(: '+tool.trim($($(value).find(config.page.listTitle)).text())+'\n')                    console.log(''+tool.trim($($(value).find(config.page.listContent)).text())+'\n')                })                console.log('+-----------------------------------------------------------+')            },            err=>{                console.log(config.error)            }        )    }}module.exports = {    consoleNews: function () {        new News().getNews()    }}

这样就实现了新闻模块,测试使用 node bin/irest news 就会如下输出

+------------------------------------------------------------+(: 又是一年春运?人民网评:今年的春运和往年相比...(: 气象台发布寒潮预警中东部气温将持续偏低江南华南等地气温较常年偏低5~6℃|降雪影响多地通信设施(: 调查:1秒刷火车票互联网黄牛“开挂”何时休黄牛用好几千兆宽带刷票|最短100毫秒点一次|监管更困难(: 部分恶搞黄河大合唱视频下架冼星海之女欲起诉经典作品不容亵渎|恶搞经典的现象很普遍|律师:平台或担责+-----------------------------------------------------------+

难点所在,图片模块

其他模块就是爬取原网页的信息,分析输出到控制台,图片模块就复杂了。需要爬取图片网站,随机找一张图片,用图像分析转成字符图片,输出到控制台

分别使用 get-pixelsimages 实现了此功能。原理就是下面的步骤

  • 根据用户输入,搜索后获取一张图片地址下载到本地缓存
  • images 把图片等比例设置成配置文件里的大小
  • get-pixels 分析 rgb 的灰度值,输出不同的字符串标识

关键代码

class Imager{    constructor(){        this.bower = new Bower()        this.gread = 'MNHQ&OC?7>!:-;.'        this.jibie = 255 / this.gread.length    }        toShow(pixels) {        // 分析图片的灰度用不同的字符串来代替        var str = ''        var width = pixels.shape[0]        var height = pixels.shape[1]        for(var i=0; i

输入 node bin/irest image 周星驰 测试效果,就绘制出了周星驰的字符图片

;;..;--::------;-::ON&H&HHQCC&QH?O7>>C>CO7QOQOC7&QH&&CQO---;;..........;;;;;;;;;.....;;----:-------;;.;;--::::--:;-;-7QQHQQ?77&H&QOC&CQ??CCQQHHC&&&?O&O&H?>7-;;;...........;;;;;;;;;;;..;;----::::-----;;.;;--:--:-----!HHHQO&HMNHQQN&&OCC?&OO&OOOCH&HQ&&O&QC&&O>-;;;.........;;;;;;;;;;;;..;;----:::::-----;;;;--:::::::->HH&&NHHQ&&Q&&&HO&&CQQQQQQHHH&QH&&H&Q&OOOQC>;;;;.........;;;;;;;--;;..;;----:::::----;;..;--:::-::-7QQQNNHQH&&QO&C&&&OOO&OHQQQQHNHNNHHQO?CH&?&HO:;;..........;;;;;----;;..;;;----::::----;;..;--:::-:>!CNHHQHHHHHQQQHHQ&O&HNNHHHQ&&&NH&HQHHHNOCQQ&ONO;.........;;;;;;----;;;.;;;---:::::-:--;;;.;--:::!!C&QHHQH&HHHNHQQ&HQQ&&COOOCOCQH&QCOHNQCQNHQHQNH7HQ;;..........;;;;----;;..;;;---:::::-:---;;.;;-::!!C&Q&NMNNNHHHHHNHO?Q&CCO?>>>!7?77CCCNH&&QHQQQCOHN7N>;;.........;;;;--;-;;..;;;---:::::-:----;.;--::!7&OHNNHHHHMHO?CQHNHQQ&&&OQC?!>>>CCCCOOQQQHHNHOQQNQHN.;.........;;;;;;;;;;;..;----:::::-:----;.;;-;!>7HQHMHMNNNHQ&QQQ?7?&Q&CO7&OC&&&HQ?7O&COOC&QHOHNCNNO&O........;;;;----;-;;;..;;;---::::::----;.;;->:7&?HQQNNNHHHQ&OQQQHQHQO7?C&O&QQQQQHHNHQOCCCOQHQQNH&OQH&......;;;;;;;----;;;..;;;---::::::----;;;;::>?&HQQCHNQQOOOO&OO?QQHCOCQ?H&Q&COQQQHNHHHHHHH&>CHHQ&QQQ&;.....;;;;;;;----;;;..;;;---::::::----;;;-;-?&&Q&NNN&&C?C?CO?C?CO&HO&7&COCCC&&OQHNNHNNMNHHNNO7CNHQQO7...;;;;;;;----;;;..;;;---:::::::-;--;.;;!&QN&HHQH&QC????C?CC!&CH&OOCQ77OOCOOCHQNHMMMNMHNHHHC7NNHQ!.;...;;;;-------;;;;.;;----:::::::---;;;-!C&OCQNMH&C???77>777>?7>C7O7&!O&&??CO&&QQCQOQHNHNHNNHNQ7MNM......;;;--------;;;.;;----:::::::---;;;::?&QHHHQQC7>>!>>7>>>!!77>?CO7OC7??&7OOOCQHC&OCQH&HHHNNNNO?M>......;;;-------;;;.;;;--::::::::----;;-:HQNQ&NHO?>>!!!:!!>>>>!77?????C7&O7C77&&?&OHQHHQQ&QQHNHQHNOM.....;;;;-------;;;.;;;--::::::::---;;-!7CHMHNN&?7!!!!:!!!::::!!>7>77?CC&CCC?&>&&&&O&QQQHNNNM&Q&&&QQ!....;;;;;-----;;;;.;;;--::::::::---;;::?QHN&MOC7>!!!:::::::::::!!>>77?O?&OOC7N!OH&7Q&&HH&MHHHQO&&Q&&....;;;;;;-----;;;.;;;--::::::::---;;->&QHHOMC?7>!::::::::::--::!>!>!7??QOQ?HCCO?&N?C>HHHQNNOH&7H&&C-;.;;;;;;------;;;..;;--::::::::----;-;QNHHHQ?77!:::::::::::-:---!!::!>7?COOCONCO&&OQ&CQHO&QM&H&&&QH7;.;;;;;;------;;;..;;--::::::::---;-7>HHHMM&?77!!::::::::::--;;--!-;-:!7??OQC&HHC&H&C&OQQHQHHQQ&&OC&:;;;;;;;------;;;..;;;-::::::::-;-;.:7QHHNN&77>>!::::::::::-;;;;-:::!!>>?CC??&Q&&Q&Q&HOOMQQQH&NC&C7?N;;;;;;;;;----;;;..;;;-::::::::-;----?QHQNN&?7>!!::::::::::-;;;;-:>>>>!:!!>777&QHN&H&&C&QC&&QNH&CCCO!?.;;;;;;-----;;;..;;;-::::::::-;--!-OHNHNMQ?7>!:::-----:----;->7???>>!::::>>77OQNHQHNHOQ&&N&OHHQ?OOC>:;;;;;;-----;;;..;;;-::::::::-;--:-?HHHHMH?7>>!:------:--:-:>??C?COC77!!::!!>?O&QQHHQQCONQQQHQNOCCCC?-;---------;;;..;;;-:::::::::;--:-CHHNHMN77>>:::-----:::!!>7??C&&>>?77!::::!7COQQNQH&OQHQHHQ&N&7QO&?--;--------;;;..;;;-:::::::::---;-&HHNHNN?7>!::-:----:::!7???CC;:!>7:;;:::-::>?&NQ&HHQ?QNNHQO&NCN&QC7;;;-------;;;..;;;--::::::::;--;:OQNNHMNC7>!:::-::--:::!???77!>CQNHHQO7!-;--:!COHH&NHO&7HNNNOQN?HOQC:----------;;;..;;--::::::::---:!CQNNHMM&?>!!!!!::::::!!>77>7>QNQNH:!::-;;.;--!7Q&HHM&NQONNHHCHO&QCO7;---------;;;..;;--::::::::;--::>&HNNNNH?>!>7?7>!!!:::!>>>>7H-OMH!:-;;....;;-::?QQHNNHHQNQ&HH&OQ&HC?----------;;;..;;--::::::::;;--::ONNMHNMO7C&&&CC?>>!:::!!>7?&!-:::-;.....;;-:!>&QNQNHNMQNQHHHQQ&&OCO----------;;;.;;--::::::::;---:-&&NNNNNHO&OOOOCC?7>!:--::>C?!!>:--;.....;---:!C&QQHHHQQHNNQQHO&&COO:---------;;..;;--::::::::;--;:.HCQNNNHH&OCQ&?COC?7>!-;---:!7!::-;;;....;---::!7O&O&NQHNQHNNQH&N&QQC?--------;;;;;;;--::::::::;----;!7ONNNNM?CH:7>!>>CO>!-.-;.:!!!:::-;;;.;;;-:::!!>?O&HHHHQ&&QNHQHNOO7HC;--------;;;..;;-::::::::;---;-;??NNNNM7O-?&MHMO!??!;..;.;-:!!!:--;;;;---:::!!>>7&QQHH&N&MNQHHNOO&??>;-------;;;..;;-::::::::;------77HHNNMN??N:NHM-&!7>-..;...;;--::-------:::::!!!>OHQQNQ&N&NNHHHHH?7O?!-------;;;..;;--:::::::;;----;;7CCHHNM7CH!>Q>!>!7>-..;...;;;---------:::::::!!>?QQQQNHHHNNQHHQ&C&OCC-;;-----;;..;;--:::::::;;----.;?:OHHNNOO&>:!!>!!7>;...;;;;-;--------:::::::!!>C&&QQNHHNHNQNHH&Q&>OO--------;;.;;;--:::::::;;---;;;->HCHNNM!O77>>>!!>>;..;;--;--;;;;;----::-::::!!7O&QH&NHNNNNH&NNQC?HO>-------;;.;;;--:::::::;;---;;;;:>7QNMN77>!>>!!!>>;.;;;--::---;;;;;-----:-::!!>?OO&Q&HMNNHN&NNCQ?7&&;;-----;;;.;;--:::::::;;---;;;;-:OCHHNO>>!!!!!!>>-.;;;;;-:::-;;;;;;------::::!7COC&&&NNMHNNH&Q&O>7&C------;;;.;;--:::::::;;---;;;;-:7>?NNN!>!!!!:!>!-;;-;;--!!:-;-;;;;-----::::!>C&?CO&HNNNHNNNHHQ?CCO-------;;;;;;-:::::::;;---;;;;-:-?7HNM!!!!!::!>!-;.....;;:--:!-;;;;;-----::::!>?OCCCCHNNNNNNHHHQCO?C>:-----;;;;;;-:::::::;;---;;;;--:->CHH!>!!!!:!>>:-;;;---:>-;;---;;;;-----::::!>?OCC?C&NNHNNNHNHQHCQ&&------;;;.;;-:::::::.;---;;;;;:-::?ON?!!!!!!!!>!:--!;N&>?;;;.;---------:::::!>??????ONHNNMMMHQH7H&&??:;---;;..;;--::::::;;;--;;;;--::::7HH>!>!!!!!!>!!!>&>77;;;;;;-:--:--::::::!>>C??777OHNNNNNNNHH&QOQH?>>--;;;;.;;--::::::;;;--;;;;--:::!>>N!>!!!!!>!777CC>:-;;;;;;-;-::-::::::::!>7C7>>77&HNNNNMNNNH&QOQQC>!--;;;;;;;--::::::;;;--;;;;---::!>!HH!!!!!!!>??77?>-;;;----:!:::::-::::!!!>CC>>!>>HNNNNNNNNHHQHO&Q??7---;;;;;;--::::::;;;--;;;;---::::!!H?>>!!!!>7??7:!------:>>>7>!:-:::!!!!>7O?>!>!!MNMNNNNNNHHO&&&&&-7!---;;;;;--::::::;;;--;;;;;--::!:!:QM!>7>!>>777>:>:---:--:?H>!!:::::!!!!>CO7>!!:QHQNNNNNNNQ&C?OQ7O7>:---;;;;;--::::::;;;--;;;;;--::!:!:O&H>!!>>>7777:!:;.;::!CN!-::!!!!:!!:!>CC7>!>?NNNMNNNNNMH&QCCO7C!7!--;;;;;;--::::::;;;---;;;;--::!::!;&H777>>>>>7>--:7CCOQH?.--:::!!!!!:!!7&?7!!-MHNNNNNNNNNH&HH>7??!7:---;;;;;--::::::;;;---;;;;---::::!:?&M!7>>>>7>!>77??H7:!;;--:::::::::!!CO?7>!HNNNNNNNNNNMNHN&N?;>!!:--;;;;;;--::::::;;;---;;;;---:::::!:OHQ!777>777O?OHC!:!;;---::--::::!>>QCC7>?NNNMMMNNNNNNHNQHHHHQ?.:---;;;;;--::::::;;;---;;;;--::::::::>&&?>?7?C7&HH&7!::--:::::---::!!!7QOO??!NMNNNMNNNNNNNNNHHQQQ&QQHO!;..;;;---:::!:;;;---;;;;--:::::::::>H?777?C&&C7>>!!!:!!:::---:::>>7O&&OC:MNMMMNNNNNNNMNNHHHHHHQ&&&&&&&QO>;..;::!::;;;---;;;;;--:::::::::7H>777???777>7?7?!:::-----:!7>OHQQO!NMMNNNMNNNNNNNNNHHQQ&QQQQQQ&&&&O&&&Q&O?>:-;;;---;;;;;--::::::::::7C:>7>?7777?77>>!!:-----:!>7OHQQ&7MNNNNMMNNNNNNNMNHHQHQHQ&&OQQ&O&&C&&&OO&&C&&;;;;--;;.;;--:::::::::--C7>>7C7>7777>!!:-------!!7OHNQ&&MNNNMMNNNNNNNNNNNHQQQ&O&&Q&QOQOO&&&O&&C&&&&&;;;;--;;;;;---:::::::--::>?-:C?7777>>!!------:!!7&NNQ&HNNMNMMNNNNNNNNNMMH&&Q&&&QQOOQQHQ&&&&&&&OQQ&&&;;;;---;;;;;--::::::::--:::!>!77777>!:::::-:!!>>ONHQHMNNNNMMNNNNNNNNNNMHQQQ&Q&OO&QQQOQQQQQQO&&OQQOQQ;;;;---;;;;---:::::::::--:-::>!777>>!!!:!!!!!7?&NNNMMNMNNMMNNNNNNNNNMMMNQQ&O&&&&Q&O&QHQQH&QO&&&&Q&&&;;;;---;;;;;--:::::!:::--:-::::?7>>>!>!!!>>>7?ONMMMMMNNNNMMNNNNNNNNNMMMHHO&Q&QQQ&O&QQOQHH&QQQ&O&&O&Q;;;;---;;;;;---:::::::-------::7O>7>>7!>77?COONMMMNNMNNNMNNNNNNNNNNMMMNQQQ&&Q&&O&QQ&&QQHH&&&Q&OQQOQQ;;;;---;;;;;---::::::::------::!?Q7?77?CCOO&QMMMNMNNMMNMMNNNNNNNNNNMNNMQQQO&&&Q&&&OQH&QQH&QQ&QQQQOQQ;;;;;--;;;;;---:::::::-;......-:O?NC7COOO&HNMMMMMMNMMMMMNNNNNMMNNNNNNNMQO&Q&QQ&O&Q&Q&&Q&&&HQO&QQQOQQ;;;;;--;;;;;;.;;..........;;-!7?NNMHHHNMMMMMMMMMMMMMNNNNNNNMMMNNNMNNMQ&QQ&O&&QQQOQ&QO&QQH&OQQ&&&QQ;;.............;..;...;;.-&?HNNMMMNNMMMMMMMMMMMNNNNNNNMMMMNNMNNNNQN&&&Q&QQO&&H&Q&Q&QHHOQQ&Q&QQ......................;--!!QNNNNMMMMMMMMMMMMMMNNNNMMMMMMMMNNMMMNNQOQ&H&&OQ&QO&QQ&QHONQ&QQOQQHQ.............;.........;;-;:&HNNNMMMNMMMMMMMMMNNNNMNMMMMMMMMNNMMMMHHOQ&Q&QQ&&&QQ&&QH&MOHQHQOQQQQ.....................;.;;;.-;;:QNNNNNNNMMMMMMMMMMMNNNNNMMMMMMNNNNNMNNMQHQQC&QH&&Q&Q&Q&QCNH&HQQQ&QQOQ..............;;;;.....;;-;;;QNHNNNNMNMMMMMMMMMMMNNNMMMMMMMMNNNNNMNMMHOHHO&Q?QQ&&&&Q&OMHH&QH&QQQQ&&..............;;;;;;;-;;;-;.HNHNNNNNNNMMMMMMMMMMMMMMMMMMMMMMNNNNNMNMNH&&OQQ&QQOHQQ&Q&NOQH&QQ&QQQQOH....;.....;;;;;;;;;;;;;;;;-NNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMNNNNNNMMNNQHQCQQOHQ&&OQQ&NH&QQQQQ&HH&Q&Q

大功告成,发布模块

发布之前的注意事项

  • 注册一个npm账号
  • 然后把 package.json 里面的 devDependencies 修改成 dependencies,具体参见 devdependencies dependencies区别

使用npm publish发布就大功告成了

测试 npm install irest-cli -g 成功~~~~
之后直接可以在全局使用 irest joke

总结

我很喜欢韩寒曾说的一句话:对我来说,所有事情的动力就是喜欢

我总结为:我所为之付出的一切都是出于喜欢,不管是人也好,事也好
最后插一句:目前我正在找工作,有意的公司请联系我,希望工作地点杭州 millent@126.com

转载地址:http://ymvhl.baihongyu.com/

你可能感兴趣的文章
Swagger 属性名 FastJson支持
查看>>
eclipse汉化经验
查看>>
CentOS 6.5修改JDK环境
查看>>
求三位数对称素数
查看>>
移动端图片放大滑动查看-插件photoswipe的使用
查看>>
常用DOS命令,程序员的帮手
查看>>
Linux 安装 Apache web服务器
查看>>
struts2 遇到的问题 2
查看>>
Java问答:终极父类(3)
查看>>
彻底搞定Android开发中软键盘的常见问题
查看>>
Java使用RandomAccessFile读写文件
查看>>
程序员学习能力提升三要素
查看>>
《Java8实战》笔记-1.2.2传递代码:一个例子
查看>>
IDEA注册机
查看>>
微信APP支付 ,App无法调起微信
查看>>
Spring boot 内嵌tomcat,临时目录不存在 错误
查看>>
fedora16中virtualbox无法启动xp虚假机
查看>>
(十五)用JAVA编写MP3解码器——音频输出
查看>>
MyClouds开发指南》第1章 MyClouds微服务治理及快速开发平台简介
查看>>
用JDK制作可能运行的JAR
查看>>