用node开发repl应用
前言
每次看到一些库npm -g install xx然后,执行xx就可以跑起来,这不就是一个shell工具了吗,那么我不就可以不用学习shell语法,直接用js写命令行脚本了吗!
什么是REPL应用
所谓的repl应用就是一个终端命令行工具,如果使用linux对于命令行工具例如curl,awk,grep,find,这些肯定不陌生,而现在,我们就是用node去写类似这样的程序
读取-求值-输出
对于第一次动手写repl应用,我们首先,了解一些知识点.
Process api
process 对象在node里面是全局对象,不需要用require引入,直接使用
console.log(process)
我们就可以在终端里面看到process都有些什么内容了.对于,开发一个repl应用,我们对于process对象只需要了解以下下几点就行
- process.argv //这次输入值集合
- process.stdout.* //终端输出方法
- process.stdin.* //终端输入方法
- process.exit(); // 退出
对于process的了解这几点大部分repl应用都可以开发了,接下来,我们说说,如何让命令行工具读取参数.
读取
对于repl而言,值读取的常见的一般有两种:
配置值
1 |
#!/usr/bin/env node |
node repl.js -w Hello world!
Hello world!
交互式
1 |
#!/usr/bin/env node |
node repl.js
input: Hello world!
output: Hello world!
repl 应用本质其实就是一个shell脚本,现在我们要用node来写,所以,对于*nix环境我们必须在第一行说明我们的文件需要在什么环境下运行.
#!/usr/bin/env node
process.argv
我们主要从命令行输入值都是从process.argv里面读取,这个对象,保存了我们所有命令行的输入,我们可以打印出来看看
console.log(`process.argv)
1
2
3
4 [ 'node',
'E:\\ProjectGitHub\\node.js\\repl.js',
'-w',
'Helloworld!' ]
从这个输出我们就可以很明了的知道我们为什么要用process.argv.slice(3);来获取值了.
process.stdout && process.stdin
这两个方法用于对终端输出和输入的操作,上面的例子应该很好演示这个使用了,这里就不再赘述了.
求值 & 输出
实战演练
现在要讲的这个repl应用就是简单的在终端中显示前端乱炖的专栏列表.效果如下(PS:绿色那些是debug输出,你自动忽略吧...):
输入
htmljs article输入htmljs article -p 1

内容准备
这里用到了request,cheerio 对前端乱炖页面进行解析,这块的讨论已经超出了本文的讨论范围,以后放在介绍cheerio的时候再说这块的实现.
用命令行看前端乱炖专栏列表:
利用Commander处理输入
对于如何在终端输入参数,在上面的读取篇已经全部介绍完毕,用原生process处理输入异常的繁琐,对于这点,TJ大神写了一个模块commander用来处理.
1 |
#!/usr/bin/env node
var program = require('commander'),
|
不到20行代码就可以解决了原本需要各种处理process.argv 情况,而且还很贴心了帮我们自动生成help介绍
htmljs article -h
使用commander 我们只需要了解一下几点就可以了
- commander.option()
用于将对象值对象化, 例如上文定义的
commander .option('-p, --page [page]', 'article list')我们输入的时候-p的时候,就可以用options.page获取我们的参数
- commander.command().option().action()
用于配置子命令
发布
有时候,一些库会要求我们
npm -g install cnpm
然后很神奇的发现可以
cnpm install xx
这类的操作,那我们发布的包怎么实现这个神奇的魔法呢.原理非常简单,我们只需要在我们的package.json加入以下几句就行
1 |
{
|
用npm 安装的时候就会自动与当前系统环境进行绑定.
接下来我们只需要
npm -g install html-js-cli
运行
htmljs article
就可以在终端看到专栏列表了
值得注意的时候,在windows发布你写node repl应用,*nix用户安装的时候,命令并不会起作用,所以,要用npm发布repl应用的时候请使用*nix系统
Node repl 应用
豆瓣电台命令行版
微博命令行工具
cnpmjs
用node开发repl应用的更多相关文章
- node开发 npm install -g express-generator@4
Node forever : 1,forever start --uid test start app.js 2,forever start --uid test start -a app.js 3, ...
- [转] 使用NVM快速搭建NODE开发环境
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node 本文主要介绍最近自己碰到的几个坑以及搜索到的相应解决方案: 如何快速搭 ...
- Node.js REPL终端
REPL表示读取评估和演示打印循环(Read Eval Print Loop),它代表一个命令输入和系统在交互模式的输出响应窗口控制台或Unix/ Linux的shell计算机环境. Node.js附 ...
- Node的REPL环境
1. Node的REPL环境 什么是REPL REPL全称 Read-eval-print-loop,交互式解析器 REPL可以提供给程序员对Node.js的一些api快速测试 REPL的基本操作 定 ...
- node开发环境配置
node开发环境配置 用处 NodeJS——后台 JavaScript-前台 后台其他语言 1.PHP 2.Java 3.Pythonnode优势 1.性能高 nodejs php 86 1s 1分半 ...
- 4、Node.js REPL(交互式解释器)
Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并 ...
- 手把手教你用Vue2+webpack+node开发一个H5 app
手把手教你用Vue2+webpack+node开发一个H5 app 前一篇vue2 + webpack + node 开发一个小demo说到了用vue的一些基本用法,这一篇就讲一个复杂一点的更完整的 ...
- Node.js REPL(交互式解析器)
Node.js REPL(交互式解释器) Node 自带了交互式解释器,可以执行以下任务: 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中. 执行 - 执行输入的数据结 ...
- 15.Node.js REPL(交互式解释器)
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电 ...
随机推荐
- SQL Server 树查询
WITH treeAS(SELECT ParentAssetID, AssetID,1 AS x2level,nodename,CAST(nodename AS NVARCHAR(max)) x2na ...
- secure erase 时必须umount
不umont就进行secure erase,仍然会执行成功,但是ssd确没有被清0,使用hexdump可以验证. 但是secure erase 命令却返回成功,造成误解以为已经擦除成功. 所以,sec ...
- 【Java】XML解析之DOM4J
DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...
- hdoj 1874 畅通工程续
Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行 ...
- Java复数的四则运算
import java.util.Scanner; import com.sun.jndi.url.iiopname.iiopnameURLContextFactory; public cla ...
- IT人士感言2(转)
01. 自己的户口档案.养老保险.医疗保险.住房公积金一定要保管好.由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5个以上的单位,这期间跳来跳去,甚至是城市都换过3个.还好户口没丢掉,其他都已经 ...
- String reorder
本问题出自:微软2014实习生及秋令营技术类职位在线测试 (Microsoft Online Test for Core Technical Positions) Description For th ...
- 50条LINUX命令整理
1. find 基本语法参数如下: find [PATH] [option] [action] # 与时间有关的参数: -mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件: - ...
- 十年学会编程 著者: Peter Norvig 翻译: Dai Yuwen
为何人人都这么着急? 信步走进任何一家书店,你会看到名为<如何在7天内学会Java>的书,还有各 种各样类似的书: 在几天内或几小时内学会Visual Basic, Windows, In ...
- 总结一下一般游戏中3D模型各种勾边方法遇到的工程性问题
以前做过简单的rim light勾边,几何勾边,这次又做了后处理的勾边,工程化的时候,都遇到很多问题,简单总结一下. 首先是火炬之光勾边效果,类似轮廓光的实现,简单的卡通渲染也是通过类似的算法加采样色 ...
