__dirname在节点14版本中未定义

时间:2020-10-16 06:22:21

标签: javascript node.js

我一直在使用节点版本12.3.4将其更新为14.14.0,并开始收到许多我已解决的问题。我唯一不了解的是问题

__dirname is not defined

__dirname是Node中的核心变量,据我所知,它是否已在Node 14中删除?

3 个答案:

答案 0 :(得分:2)

您如何加载文件?根据此问题,如果将其加载为不包含__dirname的ECMAScript模块,则会出现问题。

https://github.com/nodejs/help/issues/2907#issuecomment-671782092

按照下面的文档,您可以解决此问题: https://nodejs.org/api/esm.html#esm_no_require_exports_module_exports_filename_dirname

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

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

答案 1 :(得分:2)

通常不需要从 'url' 或 'path' 导入。

例如(使用 ESM)

fs.readFileSync(new URL('myfile.txt', import.meta.url));

将从 JavaScript 文件的目录(不是从当前工作目录)读取 myfile.txt。

答案 2 :(得分:0)

我之前的代码如下所示。

app.use(express.static(path.join(__dirname, 'public')));

我遇到了这个错误。

<块引用>

ReferenceError: __dirname 未在 ES 模块范围内定义

我通过在下面添加代码解决了这个问题。

import path from 'path';
const __dirname = path.resolve();
相关问题