快速寫個node命令行工具

1、快速入手

1.1 背景:

好多nodejs包都提供命令行工具。咱也來學學吧。html

1.2 刀耕火種時代:

環境:
win32_X86
nodejs: v5.9.1
npm: 3.7.3
首先建立個bat文件(cli-demo.bat),bat文件中調用node命令執行相應的js文件(index.js):
index.js內容:node

'use strict';
function add(args) {
    var sum = 0;
    args.forEach(function(number){
        var num = +number;
        if(!isNaN(num)){
            sum += +num;    
        }
        
    })
    return sum;
}
var args = process.argv.slice(2); // 處理參數
var sum = add(args);
console.log(sum);

cli-demo.bat內容(index.js相同目錄):shell

@ECHO OFF
SETLOCAL
SET "NODE_EXE=%~dp0\node.exe"     
IF NOT EXIST "%NODE_EXE%" (
  SET "NODE_EXE=node"     ::
)
:: 執行指定的js,並傳入參數
"%NODE_EXE%" "index.js" %*

而後把bat文件路徑添加到PATH環境變量中。
在index.js父目錄下打開cmd,並執行:npm

clipboard.png

建立bat文件,把bat路徑添加到PATH中過程是複雜了點,還好npm能夠幫咱們作這些事。json

2、npm與命令行工具

先初始化個npm項目工具

2.1 package.json-bin配置

【建立bat文件,把bat路徑添加到PATH中】這些固定的工做能夠由npm幫咱們完成。package.json中有個bin字段配置post

bin: {
"commandName1": "path/to/executableFile1",  // 路徑相對於package.json的目錄
"commandName2": "path/to/executableFile2",
}

可執行文件能夠是js文件或者無擴展名的文本文件,而且文件開頭第一行是"#!/usr/bin/env node"。在安裝包時npm就會根據bin配置生成對應的腳本(bat 或者 shell)。若是可執行文件的第一行不是"#!/usr/bin/env node",則生成的腳本文件只是簡單的指向bin配置的可執行文件。spa

2.2 舉例:

Step1:建立package.json文件,並配置bin字段。命令行

package.json:unix

"bin":{
      "cli-demo": "./bin/cli-demo"
  }

Step2:在和package.json相同的目錄下建立bin目錄,在bin目錄中添加cli-demo文本文件。
./bin/cli-demo:

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

Step3:發佈包(前提在控制檯登陸npm帳戶)

npm login
npm publish

若是沒有報錯提示的化,那就說明發布包成功了,接下來就能夠被其餘人引用了。
Step4:安裝包

npm i -g cli-demo

查看下安裝目錄中生成的腳本文件:cli-demo.bat

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\node_modules\cli-demo\bin\cli-demo" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\node_modules\cli-demo\bin\cli-demo" %*
)

文件內容就是調用node執行bin配置的文件。
Step5:執行命令

cli-demo

clipboard.png

2.3 npm幹了什麼

A:根據bin字段配置,生成腳本文件(bat for window, shell for unix)。

腳本名稱:等於bin字段的屬性名字
腳本內容:調用node名字執行bin字段對象屬性值指定的文件

B:把生產的腳本文件放在指定目錄中

全局安裝:prefix/
本地安裝:./node_module/.bin/

3、擴展

通常一個命令由三部分構成:命令名稱 選項 參數。
命名名稱:指定運行的命名
選項:修改命令的操做行爲
參數:傳給命令運行的參數
處理選項和參數能夠使用其餘庫,如CommandJS。

參考

  1. 用Node.js建立命令行工具
  2. npm-bin配置
  3. Command-line utilities with Node.js
相關文章
相關標籤/搜索