使用 Nodejs 製做命令行工具

不少編程語言均可以來開發命令行工具。寫代碼的時候,若是有一些簡單的小工具做爲輔助,開發效率能夠必定程度上提升。javascript

Node.js 做爲前端必須掌握的一個技術點,學習用它來開發命令行工具也是稱爲必須的一個技能了。html

下面的內容就是介紹如何開發一個命令行工具,從簡單到複雜。在最後也會列舉一些命令行參數的處理模塊,目的是讓命令行工具更加靈活。前端

可執行腳本

首先,建立一個腳本文件,名字爲 hello。至於爲何不使用後綴,這個應該是爲了更容易閱讀,畢竟不少執行腳本都是沒有後綴的。java

hello 中寫入須要執行的腳本代碼 :node

#!/usr/bin/env node
console.log('hello world');

#!/usr/bin/env node 必需要寫在腳本文件的第一行,目的是用來指定該腳本文件執行的環境。在這裏指定執行環境爲 Node.js 環境。webpack

若是想讓該文件能夠執行,就須要指定該腳本文件的權限爲可執行權限。web

$ chmod 755 hello

執行結束以後,hello 就能夠執行了。npm

$ ./hello
hello world

須要注意的是,在執行命令的時候必定要指定 hello 腳本文件所在的路徑,不然沒法正常執行。編程

$ hello
zsh: command not found: hello

若是想讓該命令行工具能夠在全局執行,那麼能夠建立一個 package.json 文件。json

{
  "name": "hello",
  "bin": {
    "hello": "hello"
  }
}

其中 name 是未來執行命令的關鍵詞;bin 用來指定命令對應可執行腳本文件的地址。

若是 bin 中只有一個可執行腳本,能夠指定一個字符串,如 "bin": "./bin/webpack.js"

建立完 package.json 後,而後執行 npm link 命令。

$ npm link

該命令執行完以後,會在本機中建立一個連接,鏈接到當前腳本文件所在的目錄。

~/node/v8.9.3/bin/hello -> ~/node/v8.9.3/lib/node_modules/hello/hello
~/v8.9.3/lib/node_modules/hello -> ~/Desktop/test-cli

能夠看到全局的 hello 指向 node_modules/hello/hello,最終指向的位置是當前腳本文件所在的地址 ~/Desktop/test-cli

須要說明的是,當前連接指定以後,只能到 Node.js 的全局目錄中本身刪除,或者直接刪除本身的腳本文件所在的目錄。

處理命令行參數

在處理命令行參數以前,首先要認識命令行參數。

在 Node.js 中經過 process.argv 來獲取命令行參數。

$ node test.js foo bar

這個時候經過 process.argv 獲取到的命令行參數是一個數組。

[ 
  '/Users/negivup/.nvm/versions/node/v8.9.3/bin/node',
  '/Users/negivup/Desktop/test-cli/hello',
  'foo',
  'bar'
]

能夠看到第一個參數是 node,第二個是腳本文件,從第三個參數開始纔是真正的輸入參數。

所以,處理命令行參數,就可使用下面的形式來處理。

#!/usr/bin/env node
console.log('hello ' + process.argv[2]);

這個時候執行命令,就能夠根據輸入來決定輸出了。

$ hello wang
hello wang

處理命令行參數的經常使用模塊

在這裏列舉一些經常使用的命令行參數處理模塊,爲的就是之後可以寫出更增強大的命令行工具。

yargsminimist 都是用來解析命令行參數的,可是有一點須要注意的是 yargs 內部的解析引擎就是 minimistminimist 就是一個輕量級的命令行參數解析引擎。

它們二者共同點確定有,不一樣點就是 yargs 是對 minimist 進行了更進一步的封裝。

參考連接

相關文章
相關標籤/搜索