__dirname在带有webpack捆绑的节点js中不起作用

时间:2017-04-20 18:18:26

标签: javascript node.js express webpack

我当前的目录是

D:\bkp\Programming\TestWorks\nodejs\testApp

但是当我使用__dirname并尝试使用快速服务器显示文件时,它会给我这个错误

Error: ENOENT: no such file or directory, stat 'D:\views\index.html'

我的代码是

res.sendFile(__dirname + 'views/index.html');

当我将它与webpack捆绑在一起并运行捆绑文件时,就会发生这种情况。否则,如果我只是运行正常的app.js文件,它工作正常。帮助将不胜感激。

3 个答案:

答案 0 :(得分:8)

这是因为webpack可以以不同的方式处理__dirname(以及其他特定于节点的事物)。如果您希望它的行为与正常情况一样,请在您的webpack配置中使用它:

{
    node: {
        __dirname: false
    }
}

请参阅:https://webpack.js.org/configuration/node/

答案 1 :(得分:7)

webpack将__dirname设置为/,这就是为什么你最终得到/views/index.html这个文件系统根源的原因,恰好是{{} 1}}在你的情况下。您可以在webpack配置中将D:\设置为node.dirname,以便不将其注入并将其推迟到运行时。请注意,false将引用您正在执行的脚本的位置,这意味着捆绑包的位置,而不是原始来源。

__dirname

答案 2 :(得分:0)

"webpack": "^5.24.4" 默认值取决于 target 配置属性:

target: 'web' => __dirname = '/'

target: 'node' => __dirname = 'the full path of the output directory'

可以使用 node 配置属性进行调整,参见 https://webpack.js.org/configuration/node/#node__dirname