运行 node 程序的方法是,在命令行中运行 node
命令(已安装 Node.js)并跟一个要执行的文件的名称。
比如要执行一个 node 脚本文件是 app.js,则可以这样调用:
node app.js
node 命令后跟文件名,是运行 node.js 脚本文件。
如果省略文件名,则进入 REPL 模式。
$ node>
REPL(Read Eval Print Loop)是交互式解析器。在该模式下,>
后面是等待用户输入的内容。
输入一行打印代码,回车执行:
> console.log('测试')测试undefined>
"测试" 是打印的输出,"undefined" 是函数执行的返回值。
命令行可以传递任意数量参数。
传参方式可以是键值对,也可以独立传参:
# 独立传参node app.js ruims# 键值对node app.js name=ruims
不过为了统一,参数如果是键值对,一般都会在参数名前加 --
,如:
node app.js --name=ruims
如果是短参数,一般加 -
,如:
node app.js -v
更完整的解决方案参考 commander
这个库。
所谓交互式,就是等待用户输入,然后执行下一步。
比如 vue-cli 等脚手架,至少需要输入项目名称后,才会执行创建的步骤。
从版本 7 开始,node 提供了 readline 模块来执行交互:
const readline = require('readline');const line = createInterface({input: process.stdin,output: process.stdout,});line.question(`你叫什么名字?`, (name) => {console.log(`你好 ${name}!`);line.close();});
这个模块是基础实现。更强大的方式是使用 inquirer
库,它提供了更完整、更抽象的解决方案。
const inquirer = require('inquirer');var questions = [{type: 'input',name: 'name',message: '你叫什么名字?',},];inquirer.prompt(questions).then((answers) => {console.log(`你好 ${answers['name']}!`);});
inquirer 可以执行许多操作,例如询问多项选择、展示单选按钮、确认等。
控制台打印使用 console 模块,与浏览器的打印用法基本相似。
最常用的方法就是 console.log()
:
const x = 'x'const y = 'y'console.log(x, y)
除此之外,也可以传入变量和格式说明符,举个例子:
> console.log('我的%s已经%d岁了', '猫', 2)我的猫已经2岁了
%s
作为变量取了第 2 个参数;%d
作为变量取了第 3 个参数。
格式化变量的参数有:
%s
会格式化变量为字符串%d
会格式化变量为数字%i
会格式化变量为其整数部分%o
会格式化变量为对象清空控制台
console.clear() 会清除当前控制台
元素计数
console.count() 方法,记录某个变量打印了多少次。
const name = 'ruims';console.count(name); // ruims: 1console.count(name); // ruims: 2
打印堆栈踪迹
在多层函数调用的情况下,打印函数调用栈很有用。
使用 console.trace() 实现:
const fun2 = () => console.trace();const fun1 = () => fun2();fun1();
则会打印以下内容:
Traceat function2 (repl:1:33)at function1 (repl:1:25)at repl:1:1...
计算耗时
使用 time() 和 timeEnd() 轻松地计算函数执行的时间:
const fun = () => console.log('函数执行--')const execTimes = fn => {console.time(fn.name)fn()console.timeEnd(fn.name)}
执行计时函数:
> execTimes(fun)函数执行--fun: 0.261ms
stdout 和 stderr
使用 console.log 打印消息,就是标准输出(stdout)打印。
使用 console.error 打印是标准错误(stderr)打印,它不会打印到控制台,而是直接写入错误日志中。
其他
可以使用 chalk 库为打印信息着色:
const chalk = require('chalk')console.log(chalk.yellow('你好'))
可以使用 progress 库创建进度条:
const ProgressBar = require('progress');const bar = new ProgressBar(':bar', { total: 10 });const timer = setInterval(() => {bar.tick();if (bar.complete) {clearInterval(timer);}}, 100);