📜  es 模块 __dirname 替代方案 - Javascript (1)

📅  最后修改于: 2023-12-03 15:14:53.662000             🧑  作者: Mango

以 'es' 模块 __dirname 替代方案

在 Node.js 中,使用 __dirname 可以获取当前文件所在目录的绝对路径。但是在使用 ES6 的模块语法时,__dirname 会出现未定义的情况。

解决方案

以下是两种替代方案:

1. 使用 import.meta.url

在 ES6 中,可以使用 import.meta.url 来获取当前模块的绝对路径。因此,可以通过以下方式来获取当前文件所在目录的绝对路径:

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

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

在这里,我们使用了 Node.js 内置的 urlpath 模块。fileURLToPath 用于将 import 的 url 转换为文件路径,dirname 用于获取文件所在目录的绝对路径。

2. 使用 process.cwd()

另一种获取当前工作目录的方式是使用 process.cwd()。由于 Node.js 的工作目录可以被改变,因此这种方法可能不如第一种方法稳定,但在某些情况下会更实用。

下面是一个示例:

const { resolve } = require('path');

const __dirname = resolve(process.cwd(), './dirname');

在这里,我们使用了 Node.js 内置的 path 模块。resolve 用于将多个路径解析为绝对路径,此处 resolve 函数的第二个参数为当前文件所在目录的相对路径。

结论

以上两种方法都可以用来代替 __dirname。如果您使用的是 ES6 模块语法,可以选择第一种方法,否则,选择第二种方法。