为什么 __filename 和 __dirname 在 ES 模块中不可用?

问题描述 投票:0回答:2

我知道,当使用ES模块时,

__filename
__dirname
不存在。

这在 Node.js 文档中有明确说明,并且还可以在多个地方找到替代方案,例如 这个答案

我在这里缺少的是这种行为的原因。 为什么这些变量在 ES 模块中不可用?

我找不到有关 SO 或 Node 文档的解释。

node.js es6-modules
2个回答
2
投票

在浏览器、Node.js、d8、Babel 等之间重复使用相同的代码时,文件名的概念及其含义可能会有所不同,具体取决于您使用它的方式以及文件所在的位置正在从 提供服务。当从网络服务器提供服务或由捆绑程序打包或由 shell 解释时,文件名的相关性可能不同。

因此,为了在这些“平台”上标准化这一点,ES 模块来自 URL 而不是文件名,并且

import.meta.url
作为替代功能而存在。


0
投票

最好使用更多 ES6 标准的做事方式,因为这些方式更有可能存在于其他平台上,例如 Deno 和 Bun 以及浏览器。 '__dirname' 和 '__filename' 是 Node.js 特有的。

© www.soinside.com 2019 - 2024. All rights reserved.