8

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

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

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

有什么建议么?

4

3 回答 3

14

您可以使用 访问参数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" }
于 2020-05-16T07:28:52.360 回答
10

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

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

console.log(Deno.args);

并运行它deno run test.ts firstArgument secondArgument

它将返回一个传递参数的数组:

$ deno run test.ts firstArgument secondArgument
[ "firstArgument", "secondArgument" ]
于 2020-05-16T06:22:36.727 回答
2

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

const { args } = Deno;

此外,如果您查看Deno 手册,特别是示例部分,您会发现许多执行参数解析的命令行示例程序示例,例如, Unix命令的克隆cat(也包含在Deno 手册),您还可以在第一行找到答案:

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

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

const Deno.args: string[]

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

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

然后Deno.args将包含:

[ "/etc/passwd" ]

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

于 2020-05-16T06:23:00.273 回答