如何向Deno传递命令行参数?

17

我有一个Deno应用程序,希望传递一些命令行参数。我查阅了手册,但没有找到相关内容。

我尝试使用在Node.js中使用的相同命令,假设它们可能共享某些std库,但是并没有起作用。

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

有任何建议吗?


3
Node和Deno几乎没有共同的API,这是有意为之的。Deno旨在成为一个全新的起点。Deno仅尝试直接移植的API是基于标准的浏览器API,您可以在https://developer.mozilla.org/en-US/docs/Web/API找到它们。 - Andrew Koster
3个回答

23

您可以使用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" }

1
为什么解析器认为“-h”后面需要一个值,而不是像“ls -l”一样只是一个二进制标志? - Flimm

15

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

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

console.log(Deno.args);

使用 deno run test.ts firstArgument secondArgument 命令来运行它。

这将返回传递的参数数组:

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

2
如果你在标准库中散步,你会发现一个名为flags的库,听起来像是一个用于命令行解析的库。在README中,你会在第一行找到答案:
const { args } = Deno;
此外,如果您查看Deno手册,特别是示例部分,您会发现许多命令行示例程序,例如Unix cat命令的克隆(也包含在Deno手册的入门部分中),在那里您也可以在第一行找到答案:
for (let i = 0; i < Deno.args.length; i++)
简而言之:命令行参数是全局Deno对象的属性,其文档可以在这里找到。

const Deno.args: string[]

Returns the script arguments to the program. If for example we run a program:

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

Then Deno.args will contain:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接