# 命令行编程
# 读取环境变量
Node.js 的 process
核心模块提供了 env 属性,该属性承载了在启动进程时设置的所有环境变量
示例:
console.log(process.env.NODE_EVN);
# 与控制台交互
打印输出
const x = "x";
const y = "y";
console.log(x, y);
// 可以传入格式说明符来格式化用语
console.log("我的%s已经%d岁", "猫", 2);
%s 格式化变量为字符串 %d 格式化变量为数字 %i 格式便变量为其整数部分 %o 格式化变量为对象
清空控制台
console.clear();
追踪堆栈
const fn1 = () => console.trace();
const fn2 = () => fn1();
fn2();
计算耗时
console.time();
console.timeEnd();
创建进度条
npm install progress
const ProgressBar = require("progress");
const bar = new ProgressBar(":bar", {
total: 10
});
const timer = setInterval(() => {
bar.tick();
if (bar.complete) {
clearInterval(timer);
}
}, 100);
# 从命令行接收启动参数
当使用命令调用 Node.js 程序的时候,可以传入任意数量的参数
比如:
node app.js joe bob alice
如何拿到传入的参数?获取参数值的方法时使用 Node.js 中内置的 process 对象,此对象公开了 argv 属性,该属性时一个包含所有命令行调用参数的数组,可以使用循环遍历所有的参数
process.argv.forEach((val, index) => {
console.log(`${index}:${val}`);
});
第一个参数时 node 命令的完整路径 第二个参数时正在被执行文件的完整路径 所有其他的参数从第三个位置开始
node app.js 1 两 2 3 name=gauss
# 0:C:\Program Files\nodejs\node.exe
# 1:E:\Webdev\Frontend\07Node\02Node.js文档\app.js
# 2:1
# 3:两
# 4:2
# 5:3
# 6:name=gauss
因此,如果我们如果想要只访问我们在命令行传入的参数时,可以这样
cosnt args = process.argv.slice(2)
注意到上面的第六个参数,name=gauss,我们需要对其进行解析,最好的方法是使用一个叫做 minimist 的库,该库有助于我们处理参数,但是传参的时候需要在参数名称前加上 double dash
node app.js --name=gauss
const args = require("minimist")(process.argv.slice(2));
args["name"]; // gauss
# 从命令行接收可交互的输入
如何时 Node.js CLI 程序具有交互性?
Node.js 提供了readline
模块来执行一下操作,每次一行的从可读流(Node.js 终端)获取输入
# 内置模块 readline
const readline = require("readline").createInterface({
input: process.stdin,
output: process.stdout
});
readline.question(`你叫什么名字?`, (name) => {
console.log(`你好${name}!`);
readline.close();
});
question()方法会显示第一个参数,并等待用户的输入,当按下回车(下一行)时,触发其事件监听函数
也可以使用第三方模块,比如 inquirer.js
# 第三方模块 inquirer
npm install inquirer
使用示例:
const inquirer = require("inquirer");
var questions = [
{
type: "input",
name: "name",
message: "你叫什么名字?"
}
];
inquirer.prompt(questions).then((answers) => {
console.log(`你好 ${answers["name"]}!`);
});
TIP
实际开发中,一般使用inquirer