10行Node代碼開發(fā)一個命令行字典

開發(fā)命令行原理

看似很神奇的功能,其實(shí)本質(zhì)十分簡單。

#!/usr/bin/env node
這句話,告訴了 *nix 系統(tǒng),當(dāng)前文件,應(yīng)該使用什么工具/軟件來執(zhí)行

而這,就是 node 開發(fā)命令行工具的原理。也是其它語言開發(fā)命令行工具的原理,可以對比于 windows 下的 bat 文件。

基礎(chǔ)知識

既然講到基礎(chǔ),那就盡可能使用原生的語言、不引用多余模塊的方式進(jìn)行開發(fā)。

Node 命令行工具開發(fā)中,最重(常)要的代碼/原生語句就是

  1. process 系列:
process.argv;
process.on(single, callback);
process.exit(0);

其中, process.argv 用于獲取敲擊命令時,傳入的參數(shù);
process.exit() 用來退出程序,0 表示正常退出;process.on() 用來監(jiān)聽、接收系統(tǒng)傳過來的信號(一般使用 kill -s 來傳遞 SINGLE 信號)

  1. node 系列:

這個系列的比較多。在使用 process 獲取到輸入的參數(shù),node 就可以根據(jù)這些參數(shù)去做一些想做的事了。

如果操作完后,想操作文件,保存、修改、上傳什么的,那就要用到其它模塊了。這里也給 Node 的模塊參考。比如: path、fs、request等了。

生成可執(zhí)行命令

  1. 寫好的文件,在 *nix 系統(tǒng)中,是只有讀寫操作的。需要更改文件的可執(zhí)行屬性。
chmod 755 targetFile
  1. 修改屬性后的文件,具有了可以被執(zhí)行的能力。在文件所在的目錄下,敲入
./targetFile [arg1 arg2 ...]

即可執(zhí)行. arg* 為你想傳入的參數(shù)。

  1. 這個時候,使用起來并不方便。我們可以使用 npm link 將當(dāng)前文件軟鏈接至全局對象下.
{
    "name": '你的工具名',
    "bin": {
        "myCommand": targetFile
    }
}

其中 myCommand 是你要在全局中使用該工具的名字。比如,你想輸入 doSomething 來運(yùn)行你寫的工具。targetFile 指的是你寫的文件名。即包含 #!/usr/bin/env node 語句的文件。

簡單 Demo

以做一個命令行版本的翻譯工具為例。

  1. 創(chuàng)建文件夾 /translate/
mkdir translate
  1. 打開文件夾。這里默認(rèn)使用的是 vscode
code ./translate/
  1. 編寫 index.js
#!/usr/bin/env node
'use strict';
let q = require('request');

let word = process.argv[2] || 'try once';
q.get('http://fanyi.youdao.com/openapi.do?keyfrom=node-translator&key=2058911035&type=data&doctype=json&version=1.1&q=' + word, function(error, res, body){
    console.log('get the ', word, " is: ", JSON.parse(body).translation);
});

這里使用了網(wǎng)易的 API。參考,并引用了 正凱 的博文。由于現(xiàn)在申請 AI youdao 比以前麻煩很多,故直接使用了 正凱 的接口,大家用作參考即可,正式使用。

  1. 修改 index.js 的屬性
chmod 755 index.js
  1. 編寫 package.json 文件。在同目錄下,編寫
{
    "name": "clchenliang de fanyi",
    "bin": {
        "see": "index.js"
    }
}
  1. 生成軟鏈,全局使用。在當(dāng)前目錄下,輸入:
npm link

測試

在我自己的機(jī)子上,進(jìn)行測試。任意目錄下,輸入

see awesome

如下圖:


屏幕快照 2018-09-02 19.00.54.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 系統(tǒng)管理與維護(hù)命令 date date(選項(xiàng))(參數(shù)) | 選項(xiàng) | 說明 | | :-------- | ...
    蓓蓓的萬能男友閱讀 4,170評論 0 5
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,319評論 0 10
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,199評論 2 33
  • 近日,思念漸漲,我的思緒有些不知道怎么控制,有點(diǎn)凌亂。 我不能忘記他,那我便也不逼你,但你可以慢慢地去安排自己喜歡...
    植物我愛的生命閱讀 319評論 0 0
  • 身邊有一個年輕的小朋友,最近有點(diǎn)焦慮。他即將大學(xué)畢業(yè),馬上要踏入社會。他的焦慮在于,他未來想立足的城市,房價高...
    萌萌君閱讀 308評論 1 0

友情鏈接更多精彩內(nèi)容