# 基础使用

# 环境变量

在 node 中使用 process.env.NODE_ENV 可以获取当前设置的变量

那如果设置呢?

出于兼容性考虑,一般使用 cross-env 模块设置环境变量

console.log(process.env.NODE_ENV)
"scripts": {
    "start": "cross-env NODE_ENV=dev node ./base.js"
},

# 从命令行接收参数

process.argv 可以属性可以获取命令行参数的,它的值是一个数组

  • 第一个参数是 node 命令的完整路径

  • 第二个参数是正被执行的文件的完整路径

  • 所有其他的参数从第三个位置开始

node .\base.js name=lanjz

// [
//   'C:\\Program Files\\nodejs\\node.exe',
//   'D:\\github\\Hello-Word\\blog\\docs\\Node\\Demo\\base.js',
//   'name=lanjz'
// ]

# 输出到命令行

最基础、最常用的方法是 console.log(),该方法会打印传入到控制台的字符串

可以通过传入变量和格式说明符来格式化用语

  • %s 会格式化变量为字符串

  • %d 会格式化变量为数字

  • %i 会格式化变量为其整数部分

  • %o 会格式化变量为对象

# 元素计数

const oranges = ['橙子', '橙子']
const apples = ['苹果']
oranges.forEach(fruit => {
  console.count(fruit)
})
apples.forEach(fruit => {
  console.count(fruit)
})

# 清空控制台

console.clear() 会清除控制台(其行为可能取决于所使用的控制台)

# 计算耗时

可以使用 console.time([key])console.timeEnd([key]) 轻松地计算函数运行所需的时间:

前面后的 key 要一致才能对应

const doSomething = () => console.log('测试')
const measureDoingSomething = () => {
  console.time('doSomething()')
  //做点事,并测量所需的时间。
  doSomething()
  console.timeEnd('doSomething()')
}
measureDoingSomething()

# 为输出着色

可以使用转义序列在控制台中为文本的输出着色。 转义序列是一组标识颜色的字符

console.log('\x1b[33m%s\x1b[0m', '你好')
// 将输出 黄色 的 你好

Chalk (opens new window) 是一个帮助我们简单得控制输出着色的库,除了为其着色外,它还有助于其他样式的设置(例如使文本变为粗体、斜体或带下划线)

  • log(chalk.blue.bgRed.bold('Hello world!')): 红底蓝字

  • chalk.underline.bgBlue('world'):下划线

  • log(chalk.blue.bold('Hello world!')): 蓝字加粗

# 进度条

Progress 是一个很棒的软件包,可在控制台中创建进度条。 使用 yarn addl progress 进行安装

以下代码段会创建一个 100 步的进度条,每 100 毫秒完成一步。 当进度条结束时,则清除定时器

const ProgressBar = require('progress')

var bar = new ProgressBar('  downloading [:bar] :rate/bps :percent :etas', {
    complete: '=', // 完成时填充的图案
    incomplete: ' ', // 未完成时填充的图案
    width: 10,  // 整个进度条的长度
    total: 10 // 步数
  });
const timer = setInterval(() => {
  bar.tick()
  if (bar.complete) {
    clearInterval(timer)
  }
}, 100)

# 从命令行接收输入

const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
})

readline.question(`你叫什么名字?`, name => {
  console.log(`你好 ${name}!`)
  readline.close()
})

这段代码会询问用户名,当输入了文本并且用户按下回车键时,则会发送问候语

最简单的方式是使用 inquirer (opens new window) 软件包,其在 API 方面非常相似

const inquirer = require('inquirer')

var questions = [
  {
    type: 'input',
    name: 'name',
    message: "你叫什么名字?"
  }
]

inquirer.prompt(questions).then(answers => {
  console.log(`你好 ${answers['name']}!`)
})

# 直接执行node_modeles安装的包

使用 npx