一、快速入手
1.1 背景:
好多nodejs包都提供命令行工具。咱也来学学吧。
1.2 刀耕火种时代:
环境:
win32_X86
nodejs: v5.9.1
npm: 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 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,并执行:
创建bat文件,把bat路径添加到PATH中过程是复杂了点,还好npm可以帮我们做这些事。
二、npm与命令行工具
先初始化个npm项目
2.1 package.json-bin配置
【创建bat文件,把bat路径添加到PATH中】这些固定的工作可以由npm帮我们完成。package.json中有个bin字段配置:
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 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
2.3 npm干了什么
A:根据bin字段配置,生成脚本文件(bat for window, shell for unix)。
脚本名称:等于bin字段的属性名字
脚本内容:调用node名字执行bin字段对象属性值指定的文件
B:把生产的脚本文件放在指定目录中
全局安装:prefix/
本地安装:./node_module/.bin/
三、扩展
一般一个命令由三部分构成:命令名称 选项 参数。
命名名称:指定运行的命名
选项:修改命令的操作行为
参数:传给命令运行的参数
处理选项和参数可以使用其他库,如CommandJS。