Heroku 没有这样的文件或目录,stat '/app/client/build/index.html'

ask*_*ale 5 heroku reactjs heroku-cli

我已经为这个错误苦苦挣扎了将近三个星期了,老实说,这让我发疯了。我已经使用 Heroku 来部署我的项目一年多了,在我要发布我的这个新网站之前,我从未遇到任何错误。你看,我目前在我的节点项目中安装了一个名为“index.js”的邮件服务器,而我的完整 React 项目位于一个名为 client 的文件夹中。

在此处输入图片说明 现在,这就是奇怪的地方。我的 index.js 看起来像这样:

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'));
    });
  }
Run Code Online (Sandbox Code Playgroud)

但是每次我推送到 Heroku 时,我都会在控制台中收到此错误消息:

Error: ENOENT: no such file or directory, stat '/app/client/build/index.html'
Run Code Online (Sandbox Code Playgroud)

我也一直在尝试更改和修改路径中的目录,看看是否有任何变化。我还浏览了整个互联网关于此问题的潜在解决方案的感觉,但没有任何运气。如果有人至少能指出我在这里似乎做错的正确方向,我将不胜感激。

提前致谢。

EFH*_*EFH 7

我刚刚遇到了同样的问题。您需要heroku-postbuild在 package.json 中添加一个脚本。我在我的项目中使用了 create-react-app ,所以如果你没有这样做,这一行可能会有所不同:

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

当我运行时npm run build, create-react-app 会在 build/ 文件夹中编译一个缩小的 index.html 文件,因此如果您指向的构建文件位于其他地方,您可能需要修改命令。

我的服务器结构是这样的:

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


Run Code Online (Sandbox Code Playgroud)

我在这篇方便的文章中找到了解决方案


dst*_*ana -4

没有使用 Heroku,我猜问题是“/app/client/build/index.html”。

它真的在/app/下吗?也许您应该使用相对路径,例如:

app/client/build/index.html
Run Code Online (Sandbox Code Playgroud)