__dirname未定义。

4

我不明白为什么我的 Google Cloud Run 实例不知道 __dirname 是什么。

我有一个 expressjs 服务器,其中包含以下内容:

import path from 'path';

const App = express()
    .get('/*', (_req, res) => {
      res.sendFile(path.join(__dirname, '.', 'index.html'));
    })

我遇到了一个编译错误:__dirname未定义


1
你看过这个问题的答案了吗:https://dev59.com/GGoy5IYBdhLWcg3wCpoz? - Ankit
1
__dirname 仅在以 .js 扩展名保存的脚本文件中可用。 - Ankit
这是一个JavaScript文件,它是ExpressJS。https://cloud.google.com/functions/docs/concepts/exec - PositiveGuy
我至少应该能够执行console.log(__dirname); - PositiveGuy
你的 Node 版本是多少? - Ankit
显示剩余3条评论
3个回答

11
重命名为 __dirname,它应该指向 path.join(__dirname, './src'),或者您可以使用 const __dirname = path.resolve(path.dirname('')); 创建。

2
path.resolve(path.dirname('')) 会生成当前工作目录的路径,而不是文件所在目录的路径。 - portalguy15837

3
    const path = require('path');
     
    import { fileURLToPath } from 'url'
    
    const __filenameNew = fileURLToPath(import.meta.url)
    
    const __dirnameNew = path.dirname(__filenameNew)

在ES模块中,您可以使用__dirnameNew代替__dirname


2
你的回答可以通过添加更多关于代码的信息以及它如何帮助提问者来改进。 - Tyler2P

-1

__dirname__filenamerequire在ES模块中不存在。只有在将模块作为Common JS模块运行时才可用。

要解决此问题,您需要使用类似@subbu963/esm-polyfills的polyfill来填充上述变量。

然后使用以下命令运行您的nodejs脚本:

node -r @subbu963/esm-polyfills your-script.js

更多信息请参见:https://lordofthethings.xyz/how-to-fix-referenceerror-__dirname/__filename/require-is-not-defined-in-es-module-scope/

披露:我拥有并维护@subbu963/esm-polyfillshttps://lordofthethings.xyz


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接