【问题标题】:How to pass command line arguments to Deno?如何将命令行参数传递给 Deno?
【发布时间】:2020-09-02 01:41:07
【问题描述】:

我有一个Deno 应用程序,我希望将一些命令行参数传递给它。我搜索了manual,但一无所获。

我尝试使用 Node.js 中使用的相同命令,假设它们可能会为 std 库共享一些命令,但效果不佳。

var args = process.argv.slice(2); 
// Uncaught ReferenceError: process is not defined

有什么建议吗?

【问题讨论】:

  • Node 和 Deno 几乎没有任何共同的 API。这是故意的,Deno 意味着一个新的开始。 Deno 尝试直接移植的唯一 API 是基于标准的浏览器 API,您可以在 developer.mozilla.org/en-US/docs/Web/API 之类的地方找到它们

标签: command-line-arguments deno cmdline-args


【解决方案1】:

您可以使用Deno.args 访问参数,它将包含传递给该脚本的参数数组。

// deno run args.js one two three

console.log(Deno.args); // ['one, 'two', 'three']

如果你想解析这些参数,你可以使用std/flags,它会解析类似于minimist的参数

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

console.log(parse(Deno.args))

如果你调用它:

deno run args.js -h 1 -w on

你会得到

{ _: [], h: 1, w: "on" }

【讨论】:

    【解决方案2】:

    如果您在standard library 中漫步,您会发现一个名为flags 的库,听起来它可能是用于命令行解析的库。在README 中,您会在第一行找到答案:

    const { args } = Deno;
    

    此外,如果您查看the Deno Manual,特别是Examples section,您会发现许多执行参数解析的命令行示例程序示例,例如a clone of the Unix cat command(也包含在First Steps section of the Deno Manual ),您还可以在第一行找到答案:

    for (let i = 0; i < Deno.args.length; i++)
    

    因此,简而言之:命令行参数是全局Deno 对象的属性,记录在here

    const Deno.args: string[]

    将脚本参数返回给程序。例如,如果我们运行一个程序:

    deno run --allow-read https://deno.land/std/examples/cat.ts /etc/passwd
    

    那么Deno.args 将包含:

    [ "/etc/passwd" ]
    

    注意:根据手册,所有非网络 API 都在全局 Deno 命名空间下。

    【讨论】:

      【解决方案3】:

      您可以使用Deno.args 访问 Deno 中的命令行参数。

      要尝试它,请创建一个文件 test.ts :

      console.log(Deno.args);
      

      然后使用deno run test.ts firstArgument secondArgument 运行它

      它会返回一个传入参数的数组:

      $ deno run test.ts firstArgument secondArgument
      [ "firstArgument", "secondArgument" ]
      

      【讨论】:

        猜你喜欢
        • 2021-11-25
        • 2013-10-11
        • 1970-01-01
        • 2012-09-01
        • 2020-08-02
        • 2014-01-13
        • 2014-05-03
        • 2011-10-14
        相关资源
        最近更新 更多