14
votes

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.

3

3 Answers

21
votes

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
    }
}

See: https://webpack.js.org/configuration/node/

12
votes

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
}
0
votes

"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