Node.js 中 process.argv 的 Deno 等价物是什么?

What is the Deno equivalent of process.argv in Node.js?

使用 NodeJS 时,我可以像这样将参数传递给 Node 脚本:

$ node node-server.js arg1 arg2=arg2-val arg3

并且可以像这样得到参数​​:

// print process.argv
process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});
//Output
0: node
1: /Users/umar/work/node/node-server.js
2: arg1 
3: arg2=arg2-val
4: arg3

如何在 Deno 中获取命令行参数?

一些专家建议我通过

的答案来解决问题

Deno executable path ~ process.argv[0]:

Deno.execPath()

已执行脚本的文件 URL ~ process.argv[1]:

Deno.mainModule

您可以使用 path.fromFileUrl 将 URL 转换为路径字符串:

import { fromFileUrl } from "https://deno.land/std@0.55.0/path/mod.ts";
const modPath = fromFileUrl(import.meta.url)

命令行 arguments ~ process.argv.slice(2):

Deno.args

例子

deno run --allow-read test.ts -foo -bar=baz 42

样本输出(Windows):

Deno.execPath(): <scoop path>\apps\deno\current\deno.exe
import.meta.url: file:///C:/path/to/project/test.ts
  as path: C:\path\to\project\test.ts
Deno.args: [ "-foo", "-bar=baz", "42" ]

要在 Deno 中获取脚本的 CLI 参数,只需使用 Deno.args:

> deno run ./code.ts foo bar
console.log(Deno.args); // ['foo', 'bar']

如果出于兼容性原因需要与 Node process.argv 相同 的东西,请使用官方 'node' shim:

import process from from 'https://deno.land/std@0.100.0/node/process.ts'

console.log(process.argv); // ['/path/to/deno', '/path/to/code.ts', 'foo', 'bar']

出于说明目的,如果您想手动构造一个 process.argv 样式的数组(不使用官方 'node' 填充程序),您可以这样做:

import { fromFileUrl } from "https://deno.land/std@0.100.0/path/mod.ts";

const argv = [
   Deno.execPath(),
   fromFileUrl(Deno.mainModule),
   ...Deno.args,
]

console.log(argv); // ['/path/to/deno', '/path/to/code.ts', 'foo', 'bar']