My current directory is
D:\bkp\Programming\TestWorks\nodejs\testApp
but when i am using __dirname and trying to show a file with express server it gives me this error
Error: ENOENT: no such file or directory, stat 'D:\views\index.html'
my code for that is
res.sendFile(__dirname + 'views/index.html');
when i am bundling it with webpack and run the bundle file then this happens. Otherwise if i just run the normal app.js file it works fine. Help would be appreciated.
This is because webpack can handle __dirname (and other node specific things) in different ways. If you want it to behave like normal, use this in your webpack config:
{
node: {
__dirname: false
}
}
The __dirname is set to / by webpack, that's why you end up with /views/index.html which is the root of your file system, that happens to be D:\ in your case. You can set node.dirname to false in your webpack config to not inject it and defer it to runtime. Keep in mind that __dirname will refer to the location of the script you're executing, that means the location of the bundle, not the original source.
node: {
__dirname: false
}
"webpack": "^5.24.4"
the default value depends on the target configuration property:
target: 'web' => __dirname = '/'
target: 'node' => __dirname = 'the full path of the output directory'
It can be adjusted using node configuration property, see https://webpack.js.org/configuration/node/#node__dirname