在启动Node程序时,我们希望能在命令行启动时,传入参数,Node程序根据输入的命令参数,执行相应的处理流程。
在Node程序中,使用process.argv 获取命令行输入参数。Process.argv 是一个数组,用于存放从命令行传入的参数。其类似C语言main 函数中的char* argv[].
假定我们在控制台输入 node argument.js –r arguments.js . 那么程序
argument.js 启动后, process.argv 数组中就就存储了以下几个字符串信息:
process.argv[0] = “node”, process.argv [1]= “argument.js”, process.argv [2] = “-r”
process.argv[3] = “argument.js”. 由于参数数组的前两个存储的是字符串”node”和源代码文件名,要想获得有效的输入参数,我们一般会从process.argv[2] 开始处理。
举个例子,arguments.js 的代码内容如下:
var args = { '-h': displayHelp, '-r': readFile }; function displayHelp() { console.log('Argument processor:', args); } function readFile(file) { if (file && file.length) { console.log('Reading:' ,file); console.time('read'); var stream = require('fs').createReadStream(file); stream.on('end', function() { console.timeEnd('read'); }); stream.pipe(process.stdout); } else { console.error('A file must be provided with the -r option'); process.exit(1); } } if (process.argv.length > 0) { process.argv.forEach(function(arg, index) { if (arg === '-r' || arg === '-h') { console.log(process.argv.slice(index + 1)); args[arg].apply(this, process.argv.slice(index+1)); } }); }
在末尾的if 判断中,先看看是否有输入参数需要解析,如果有,那么process.argv.length 大于0. 接着查看参数数组中的每个元素的内容。看看是否有程序需要处理的-r 或 -h 参数,如果有,那么从args对象中,获取相应参数的响应函数,-r 或 -h 后面的参数,则作为响应函数的输入参数。如果我们输入的命令行参数如下:
Node argument.js -r argument.js
那么 代码中的 args[arg].apply(this, process.argv.slice(index)) 其实就等价于:
readFile("argument.js")
程序执行的结果是,将argument.js的内容输出的控制台: