使用 ES6 模块时 Node.js 中 __dirname 的替代方案

新手上路,请多包涵

我在运行我的 Node 应用程序时使用标志 --experimental-modules 以使用 ES6 模块。

但是,当我使用此标志时,元变量 __dirname 不可用。是否有另一种方法可以获取与此模式兼容的 __dirname 中存储的相同字符串?

原文由 Amygdaloideum 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

从 Node.js 10.12 开始,有一种替代方法不需要创建多个文件并跨平台处理文件名中的特殊字符:

 import { dirname } from 'path';
import { fileURLToPath } from 'url';

const __dirname = dirname(fileURLToPath(import.meta.url));

原文由 GOTO 0 发布,翻译遵循 CC BY-SA 4.0 许可协议

2021年最规范的方式

import { URL } from 'url'; // in Browser, the URL in native accessible on window

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

忘记 join 从当前文件创建路径,只需使用 URL

 const pathToAdjacentFooFile = new URL('./foo.txt', import.meta.url).pathname;
const pathToUpperBarFile = new URL('../bar.json', import.meta.url).pathname;

原文由 Rudolf Gröhling 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题