Kodokon kodokon.com

命令行脚本:参数、环境与退出码

你将编写一些脚本,它们用 process.argv 接收参数、读取环境变量,并返回一个退出码。

8 分钟 · 3 题

在 Kodokon 中打开本课

你已经在使用命令行程序了:nodenpmgit 等等。每一个都接受参数,也就是跟在它名字后面输入的那些词,它们会改变程序的行为。让我们来写一个自己的。Node 暴露了全局对象 process,它描述当前正在运行的程序,你在 process.version 那里遇到过它。它的属性 process.argv 是一个数组,包含:索引 0 处是 Node 的路径;索引 1 处是你脚本的路径;从索引 2 开始,则是用户实际输入的参数。

JAVASCRIPT
console.log(process.argv);

const args = process.argv.slice(2);
console.log("Your arguments:", args);
把这段代码保存到 args.js 里,然后运行 node args.js apple pear:slice(2) 会把有用的参数单独取出来。

第二个信息来源:环境变量。它们是系统在启动程序时提供给程序的名字/值对。它们用于配置:一个秘密的 API 密钥、调试模式、数据库地址等等。你可以在 process.env 对象里读取它们。一个不存在的变量是 undefined:请始终为它准备一个默认值,比如用 ?? 运算符。

JAVASCRIPT
const level = process.env.LOG_LEVEL ?? "info";

console.log("Log level:", level);
把这段代码保存到 config.js 里:在没有定义任何变量时,级别就是 info。
BASH
LOG_LEVEL=debug node config.js
在 macOS 和 Linux 上,你可以在命令的正前面定义一个变量:这样脚本就会打印出 debug。

当一个程序结束时,它会向系统返回一个退出码:一个概括运行情况的数字。通用约定:0 表示 "成功",任何其他值都表示出错了,其他工具和脚本正是靠检查这个数字来判断一切是否正常。process.exit(1) 会立即以退出码 1 停止脚本。此外,请用 console.error 来输出错误消息:它会写到错误输出(stderr),这是一个和正常输出分开的通道。让我们把这一切整合到一个完整的脚本里。

JAVASCRIPT
const name = process.argv[2];

if (!name) {
  console.error("Usage: node greet.js <name>");
  process.exit(1);
}

console.log(`Hello, ${name}!`);
在没有参数时,greet.js 会说明它的用法并以退出码 1 退出;给出一个名字时,它会打招呼并以退出码 0 结束。

知识检测

确认你已牢记本课的重点内容。

  1. 在 process.argv 里,用户输入的第一个参数在哪里?
    • 在索引 0 处
    • 在索引 2 处
    • 在索引 1 处
    • 总是在最后一个索引处
  2. 哪个退出码表示程序成功结束?
    • 0
    • 1
    • 200
  3. 在一个 Node 脚本里,你如何读取 API_KEY 这个环境变量?
    • process.argv.API_KEY
    • env.get("API_KEY")
    • process.env.API_KEY