【Node.js】十行代碼開發一個 Node 命令行工具(有道詞典)

開發命令行原理

看似很神奇的功能,其實本質十分簡單。

#!/usr/bin/env node
這句話,告訴了 *nix 系統,當前文件,應該使用什麼工具/軟件來執行

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

基礎知識

既然講到基礎,那就儘可能使用原生的語言、不引用多餘模塊的方式進行開發。

Node 命令行工具開發中,最重(常)要的代碼/原生語句就是
1. process 系列:

process.argv;
process.on(single, callback);
process.exit(0);

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

  1. node 系列:

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


如果操作完後,想操作文件,保存、修改、上傳什麼的,那就要用到其它模塊了。這裏也給 Node 的模塊參考。比如: pathfsrequest等了。

生成可執行命令

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

即可執行. arg* 爲你想傳入的參數。
3. 這個時候,使用起來並不方便。我們可以使用 npm link 將當前文件軟鏈接至全局對象下.

{
    "name": '你的工具名',
    "bin": {
        "myCommand": targetFile
    }
}

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

簡單 Demo

以做一個命令行版本的翻譯工具爲例。
1. 創建文件夾 /translate/

mkdir translate
  1. 打開文件夾。這裏默認使用的是 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);
});

這裏使用了網易的 API。參考,並引用了 正凱 的博文。由於現在申請 AI youdao 比以前麻煩很多,故直接使用了 正凱 的接口,大家用作參考即可,正式使用。

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

測試

在我自己的機子上,進行測試。任意目錄下,輸入

see awesome

翻譯單詞

代碼

process.exit(0)

常用的模塊

  1. yargs
  2. shelljs
  3. TJ 大神寫的 command.js
  4. color.js

命令行開發基礎知識

node 交互

敲代碼時遇到的問題


  1. #! 後跟路徑: #!/usr/bin/env

容易把 #!/ 當成一個操作符
*nix 系列操作系統將該語句當作解釋器,用來解釋、編譯接下來的語句
  • npm link
  • process.argv 的形式有哪些,命令行參數、子命令
  • kill -s
  • 命令行顏色控制

    這一部分比較簡單,也不屬於太核心的概念,大家可以自行了解。常用的有 color.js 模塊。

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章