You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Node.js应用到Heroku报错:ENOENT找不到/app/index.html文件

Hey there, let's break down why you're seeing that ENOENT: no such file or directory, stat '/app/index.html' error on Heroku. I've run into this exact issue before, so let's walk through the most likely fixes step by step.

1. First, understand Heroku's file structure

When you deploy to Heroku, your entire Git repository gets cloned into the /app directory of the dyno. So when you run heroku run bash, you're dropped directly into /app—that means any files you see in that bash session are the ones in /app on the server. If you don't see index.html there, it's either not committed to Git, or your code is looking in the wrong place.

2. Check if index.html is actually deployed

First, confirm the file exists in Heroku's /app directory:

  • Run heroku run ls in your local terminal. This will list all files in the dyno's /app folder.
  • If index.html isn't listed, that means it wasn't pushed to Git. Check your local repository:
    • Run git status to see if index.html is marked as "untracked" or ignored.
    • Open your .gitignore file—if index.html or the folder containing it is listed, remove that line.
    • Commit the file with git add index.html && git commit -m "Add index.html to deployment", then push again with git push heroku main.

3. Fix hardcoded paths in your Server.js

The error mentions /app/index.html, which suggests your code is using an absolute path that might not match where the file actually lives. On Heroku, your project files are directly in /app, but if your code is hardcoding /app/index.html while locally the file is in a different relative path, or vice versa, it'll break.

Instead, use Node's __dirname variable (which points to the directory of your Server.js file) to build a dynamic, cross-environment path. Here's how to adjust your code:

First, require the path module at the top of Server.js:

const path = require('path');

Then, replace any hardcoded paths with path.join(__dirname, 'your-file-name.html'). For example, if you're serving the index file directly:

app.get('/', (req, res) => {
  // This will correctly point to index.html in the same directory as Server.js, whether local or on Heroku
  res.sendFile(path.join(__dirname, 'index.html'), (err) => {
    if (err) {
      console.error('Failed to load index.html:', err);
      res.status(500).send('Server error');
    }
  });
});

If you're using Express's static middleware for assets, do the same:

// Serve static files from a "public" folder
app.use(express.static(path.join(__dirname, 'public')));

4. Double-check your package.json start script

Make sure your package.json has a valid start script that points to Server.js:

"scripts": {
  "start": "node Server.js"
}

Heroku uses this script to start your app, so if it's missing or pointing to the wrong file, that could cause unexpected path issues too.

After making these changes, commit your code and redeploy to Heroku. The error should resolve once the file is present and your paths are correctly configured.

内容的提问来源于stack exchange,提问作者Pavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:22:45