我一直在使用节点版本12.3.4
将其更新为14.14.0,并开始收到许多我已解决的问题。我唯一不了解的是问题
__dirname is not defined
__dirname
是Node中的核心变量,据我所知,它是否已在Node 14中删除?
答案 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();