Deno 中的 Node.js 的 __dirname 和 __filename 等效项

Posted

技术标签:

【中文标题】Deno 中的 Node.js 的 __dirname 和 __filename 等效项【英文标题】:Node.js' __dirname & __filename equivalent in Deno 【发布时间】:2020-09-01 21:03:00 【问题描述】:

如何获取当前模块的目录和文件名?在 Node.js 中,我会使用:__dirname & __filename

【问题讨论】:

【参考方案1】:

在 Deno 中,没有像 __dirname__filename 这样的变量,但由于 import.meta.url,您可以获得相同的值

您可以为此使用URL 构造函数:

const __filename = new URL('', import.meta.url).pathname;
// Will contain trailing slash
const __dirname = new URL('.', import.meta.url).pathname;

注意:在windows上它将包含/,下面显示的方法将在windows上工作


另外,你可以使用std/path

import * as path from "https://deno.land/std@0.57.0/path/mod.ts";

const __filename = path.fromFileUrl(import.meta.url);
// Without trailing slash
const __dirname = path.dirname(path.fromFileUrl(import.meta.url));

其他替代方法是使用第三方模块,例如:deno-dirname

import  __  from 'https://deno.land/x/dirname/mod.ts';
const  __filename, __dirname  = __(import.meta);

【讨论】:

https://deno.land/x/dirname 不存在,这是一个死链接。 这在 Windows 上对我不起作用,我在这里找到了一个可行的解决方案:morioh.com/p/68bf0c73b2bb 也不能在 Windows 上运行 - 它会生成带有不正确前导空格的路径,例如 /C:/path/to/file.jsonreadTextFile 无法理解。 @AndrewKoster 至少现在可以了。 太棒了!希望他们这次决定放弃它。

以上是关于Deno 中的 Node.js 的 __dirname 和 __filename 等效项的主要内容,如果未能解决你的问题,请参考以下文章

Deno 会取代 Node.js 吗?

要取代 Node.js 的 Deno 还活着吗?

TypeScript--deno前置学习

译啥是Deno?跟Node.js有啥区别?

Deno 将于 5 月 13 日发布 1.0 版本,Node.js 会逐渐失宠吗?

如何学习Deno