快速写个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
相关文章
相关标签/搜索