一、快速入手
1.1 背景:
好多nodejs包都提供命令行工具。咱也来学学吧。
1.2 刀耕火种时代:
环境:
win32_X86nodejs: v5.9.1npm: 3.7.3首先创建个bat文件(cli-demo.bat),bat文件中调用node命令执行相应的js文件(index.js):index.js内容:'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相同目录):
@ECHO OFFSETLOCALSET "NODE_EXE=%~dp0\node.exe" IF NOT EXIST "%NODE_EXE%" ( SET "NODE_EXE=node" ::):: 执行指定的js,并传入参数"%NODE_EXE%" "index.js" %*
然后把bat文件中。
在index.js父目录下打开cmd,并执行:
创建bat文件,把bat路径添加到PATH中过程是复杂了点,还好npm可以帮我们做这些事。
二、npm与命令行工具
先初始化个npm项目
2.1 package.json-bin配置
【创建bat文件,把bat路径添加到PATH中】这些固定的工作可以由npm帮我们完成。package.json中有个:
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配置的可执行文件。
2.2 举例:
Step1:创建package.json文件,并配置bin字段。
package.json:
"bin":{ "cli-demo": "./bin/cli-demo" }
Step2:在和package.json相同的目录下创建bin目录,在bin目录中添加cli-demo文本文件。
./bin/cli-demo:#!/usr/bin/env nodeconsole.log('heheh');
Step3:发布包(前提在控制台登录npm账户)
npm loginnpm 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
2.3 npm干了什么
A:根据bin字段配置,生成脚本文件(bat for window, shell for unix)。
脚本名称:等于bin字段的属性名字脚本内容:调用node名字执行bin字段对象属性值指定的文件
B:把生产的脚本文件放在指定目录中
全局安装:prefix/本地安装:./node_module/.bin/
三、扩展
一般一个命令由三部分构成:命令名称 选项 参数。
命名名称:指定运行的命名选项:修改命令的操作行为参数:传给命令运行的参数处理选项和参数可以使用其他库,如CommandJS。