首页 > 语言 > JavaScript > 正文

node.js命令行教程图文详解

2024-05-06 15:38:59
字体:
来源:转载
供稿:网友

本文先介绍原生的node.js实现命令行交互,了解原生的api,然后通过commander.js和inquirer.js实现一个完整的交互命令行工具。

项目地址

process (进程)

process对象是一个全局变量,它提供了当前node.js进程的信息并对其控制。因为其是一个全局变量所以无需在文件中引入。

需要用到的几个api

process.argv process.cwd() process.stdin process.stdout process.stdin.resume() process.argv

process.argv

属性返回一个数组。数组的第一个值是process.execPath,第二个是正在执行的JavaScript的文件路径,其余参数为其它命令参数,这是我们来自定义命令的关键。

示例

新建argv.js

// argv.jsconsole.log(process.argv)

执行node命令node argv.js

node argv.js --name zhu## 输出[ '/usr/local/bin/node', ## 执行当前脚本的Node二进制文件的绝对路径 '/Users/zhuhuilong/Node/Book/argv.js', ## 文件的绝对路径 '--name', ## 其余参数 'zhu' ]

接收自定义的命令参数进行处理输出

// argv.jsconsole.log(process.argv)let argvs = process.argvlet param = argvs.splice(2)if(param[0] && param[0] == '--name'){ if(param[1]){ console.log(`hello ${param[1]}`) }else{ console.log('请输入name') }}

运行argv.js

node argv.js --name zhu## 输出[ '/usr/local/bin/node', '/Users/zhuhuilong/Node/Book/argv.js', '--name', 'zhu' ]hello zhuparam [ '--name', 'zhu' ]

process.stdin与process.stdout

process.stdin(标准输入)

process.stdin 属性返回连接到 stdin (fd 0) 的流。 它是一个 net.Socket 流(也就是双工流),除非 fd 0 指向一个文件,在这种情况下它是一个可读流。

process.stdout(标准输出)

process.stdout 属性返回连接到 stdout (fd 1) 的流。 它是一个 net.Socket 流(也就是双工流),除非 fd 1 指向一个文件,在这种情况下它是一个可写流。

process.stdin.resume()

一个指向 标准输入流(stdin) 的可读流(Readable Stream)。标准输入流默认是暂停 (pause) 的,所以必须要调用 process.stdin.resume() 来恢复 (resume) 接收。 作为流,process.stdin可以在旧模式下使用。为了兼容node v0.10以前的版本。在旧模式喜爱使用stdin必须调用process.stdin.resume()。注意如果调用了process.stdin.resume() stdin将转为旧模式。

通俗来讲就是控制台等待我们输入内容不退出进程,对输入输出进行交互。

新建inputout.js

// inputout.jsprocess.stdin.setEncoding('utf8')let argvs = process.argvlet param = argvs.splice(2)if (param[0] && param[0] == '--name') { if (param[1]) { console.log(`hello ${param[1]}`) } else { process.stdout.write(`请输入name:`) process.stdin.resume() process.stdin.on('data', chunk => {  if (!!chunk.replace(/[/r/n]/g, '')) {  process.stdout.write(`你输入的name是: ${chunk}`)  process.stdin.emit('end')  } else {  process.stdout.write(`请输入name:`)  } }) }}process.stdin.on('end', () => { process.stdout.write('结束/n')})            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选