【问题标题】:What is the Deno equivalent of process.argv in Node.js?Node.js 中 process.argv 的 Deno 等价物是什么?
【发布时间】:2021-08-17 03:41:22
【问题描述】:

使用 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 中获取命令行参数?

一些专家建议我通过回答question来解决问题

【问题讨论】:

  • 这能回答你的问题吗? How to pass command line arguments to Deno?
  • 获取命令行参数的方法并不多,只有一种,Deno.args
  • 也许,将标题重命名为“Node.js 中 process.argv 的 Deno 等价物是什么?”。至少我的回答是这样解释你的问题的。
  • 很好的建议,谢谢!完成!

标签: deno


【解决方案1】:

德诺executable path~process.argv[0]:

Deno.execPath()

执行脚本的文件地址~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" ]

【讨论】:

  • 这是错误的。您不能为此使用import.meta.url,它包含当前文件(如Node 中的__filename),而不是主文件,除非它们恰好相同。
  • Deno.mainModule 现在稳定了。请参阅 comparisonimport.meta.url
  • @callum 呵呵,这正是我写的? "// 把它放在你的主文件中以获得它的完整路径"
  • 好的,但它位于标题 File URL of executed script ~ process.argv[1] 下,并在该上下文中作为 Deno.mainModule 的替代品引入。反正Deno.mainModule已经很稳定了,可以编辑了
【解决方案2】:

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

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

如果您出于兼容性原因需要与 Node 的 process.argv 相同的东西相同,请使用官方的“节点”垫片:

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 样式的数组(不使用官方的“节点”垫片),您可以这样做:

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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多