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

Sho*_*v3_ 6 javascript node.js express webpack

我目前的目录是

D:\bkp\Programming\TestWorks\nodejs\testApp
Run Code Online (Sandbox Code Playgroud)

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

Error: ENOENT: no such file or directory, stat 'D:\views\index.html'
Run Code Online (Sandbox Code Playgroud)

我的代码是

res.sendFile(__dirname + 'views/index.html');
Run Code Online (Sandbox Code Playgroud)

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

0xR*_*xRm 9

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

{
    node: {
        __dirname: false
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*ngo 8

__dirname/由webpack 设置的,这就是为什么你最终/views/index.html会遇到文件系统的根源,恰好D:\在你的情况下.您可以设置node.dirnamefalse你的WebPack配置不注射,并推迟其运行时.请记住,这__dirname将指向您正在执行的脚本的位置,这意味着捆绑包的位置,而不是原始来源.

node: {
  __dirname: false
}
Run Code Online (Sandbox Code Playgroud)