用node開發repl應用

2021-09-07 04:40:39 字數 3747 閱讀 9671

前言

每次看到一些庫npm -g install xx然後,執行xx就可以跑起來,這不就是乙個shell工具了嗎,那麼我不就可以不用學習shell語法,直接用js寫命令列指令碼了嗎!

什麼是repl應用

所謂的repl(read-eval-print-loop)應用就是乙個終端命令列工具,如果使用linux對於命令列工具例如curl,awk,grep,find,這些肯定不陌生,而現在,我們就是用node去寫類似這樣的程式

讀取-求值-輸出

對於第一次動手寫repl應用,我們首先,了解一些知識點.

文件 

process 物件在node裡面是全域性物件,不需要用require引入,直接使用

console.log(process)

我們就可以在終端裡面看到process都有些什麼內容了.對於,開發乙個repl應用,我們對於process物件只需要了解以下下幾點就行

對於process的了解這幾點大部分repl應用都可以開發了,接下來,我們說說,如何讓命令列工具讀取引數.

對於repl而言,值讀取的常見的一般有兩種:

配置值

123

4567

8910

#!/usr/bin/env node

if(process.argv[2] === '-w')) console.log(output); process.exit(); }

node repl.js -w hello world!

hello world!

互動式

123

4567

891011

12

#!/usr/bin/env node

function read(prompt) ); } read('input')

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)

123

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用來處理.

123

4567

891011

1213

1415

1617

1819

#!/usr/bin/env node

var program = require('commander'),

htmljscli = require('../index'), libinfo = require('../package'); program .version(libinfo.version) program .command('article') .description('show article list') .option('-p, --page [page]', 'article list') .action(function(options)); program.parse(process.argv); // 這行必須是結尾

不到20行**就可以解決了原本需要各種處理process.argv情況,而且還很貼心了幫我們自動生成help介紹

htmljs article -h

使用commander我們只需要了解一下幾點就可以了

用於將物件值物件化, 例如上文定義的commander .option('-p, --page [page]', 'article list')我們輸入的時候-p的時候,就可以用options.page獲取我們的引數

用於配置子命令

有時候,一些庫會要求我們

npm -g install cnpm

然後很神奇的發現可以

cnpm install xx

這類的操作,那我們發布的包怎麼實現這個神奇的魔法呢.原理非常簡單,我們只需要在我們的package.json加入以下幾句就行

123

45

}

npm安裝的時候就會自動與當前系統環境進行繫結.

接下來我們只需要

npm -g install html-js-cli

執行

htmljs article

就可以在終端看到專欄列表了

值得注意的時候,在windows發布你寫node repl應用,*nix使用者安裝的時候,命令並不會起作用,所以,要用npm發布repl應用的時候請使用*nix系統

node 建立應用

簡單的說就是乙個 服務端渲染 的 mvc 框架。優點 adonisjs 作為乙個服務端渲染的框架,能夠解決很多現在流行的前端框架無法實行的問題 比如相容 ie8 等 npm install adonisjs cli global 全域性安裝 adonisjs adonis new project a...

Node建立應用

使用 node.js 時,我們不僅僅 在實現乙個js應用,同時還實現了整個 http 伺服器.1 引入 required 模組 我們可以使用require指令來載入 node.js 模組.2 建立伺服器 伺服器可以監聽客戶端的請求,類似於 apache nginx 等 http 伺服器.3 接收請求...

用Node Inspector除錯NodeJs程式

一 安裝 npm install node inspector g 二 使用 2.啟動node inspector node inspector web port 8080 debug port 5858 在5858埠掛上偵錯程式,然後允許程式設計師通過8080埠進行除錯 三 除錯 1.使用chro...