Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Heroku no such file or directory, stat '/app/client/build/index.html'

I have been struggling with this error for literally almost three weeks now, and it's honestly driving me crazy. I have been using Heroku to deploy my projects for over a year now, and I have never experienced any errors until I was going to release this new website of mine. You see, I currently have a mail server installed in my node project, called "index.js" while my full React project is in a folder called client.

enter image description here Now, here is what's weird. My index.js looks like this:

if (process.env.NODE_ENV === 'production') {
    app.use(express.static('client/build'));
    const path = require('path');
    app.get('*', (req, res) => {
      res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    });
  }

But each time I push to Heroku, I get this error message in the console:

Error: ENOENT: no such file or directory, stat '/app/client/build/index.html'

I have also been trying to change and modify the directories in the path, to see if anything changes. I have also looked through what feels like the whole internet regarding a potential solution for this issue, without any luck. I would be extremely grateful if someone could at least point me in the right direction of what I seem to do wrong here.

Thanks in advance.

like image 985
askaale Avatar asked Nov 06 '22 22:11

askaale


1 Answers

I just ran into the same issue. You need to add a heroku-postbuild script in your package.json. I used create-react-app for my project, so if you didn't this line may differ a bit:

"heroku-postbuild": "cd client && npm install --only=dev && npm install && npm run build"

When I run npm run build, create-react-app compiles a minified index.html file in the build/ folder, so you might need to modify the command if the build file you are pointing to lies elsewhere.

My server structure is like this:

server.js
client/
  build/
  public/
    - index.html
  src/
    - index.js


I found the solution in this handy article

like image 74
EFH Avatar answered Nov 15 '22 05:11

EFH