Deno获取cmd输入的参数

101 阅读1分钟

我们如果要开发一个cli工具,通常需要获取用户输入的参数,这些参数存储在Deno.args中。 可以用官方的解析来方便我们开发:

import { parse } from "https://deno.land/std/flags/mod.ts";
const serverArgs = parse(Deno.args);

console.log(serverArgs);

假设这个文件是test.ts,我们执行命令:

deno run test.ts  aa --name bb cc --age dd -E gg -H

得到以下:

{ _: [ "aa", "cc" ], name: "bb", age: "dd", E: "gg", H: true }

解析规则也很好理解

  • 不带-的,视为单独的参数,放在_对应的数组里
  • 带-的,看是否结对,单独一个的话值是true,否则就是具体值
  • -最多为2个,否则也只按1个来

我们在使用别人的脚手架的时候,会发现通常有一种别名的使用,比如npm i与npm install是一个意思。 这个在parse的第二个参数中也能很方便地配置。

这是一个样例,下面将success与S等价,有默认值false,parse时会直接解析成bool值。

import { parse, ArgParsingOptions } from "https://deno.land/std/flags/mod.ts";

const options: ArgParsingOptions = {
  string: ["name"],
  boolean: ["success", "verbose"],
  alias: {
    success: "S",
    verbose: "v",
  },
  default: {
    name: "world",
    success: false,
    verbose: false,
  },
};

export interface Params {
  _: string[];
  success: boolean;
  verbose: string;
  name: string; 
}

const args = parse(Deno.args, options) as Params;

console.log(`Hello, ${args.name}!`);

if (args.success) {
  console.log("Operation succeeded.");
}

if (args.verbose) {
  console.log("Running in verbose mode.");
}