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

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

应用程序仓库:https://github.com/calebkish/DevConnector

首先,我的 Web 应用程序已推送到 Heroku。

我正在尝试将我的 MERN Web 应用程序成功构建到 Heroku 上,但是当我访问我的应用程序页面时(https://safe-fortress-83003.herokuapp.com/),它只会从根 GET 响应返回错误“未找到”。当我查看 Heroku 应用程序的日志时,发送根请求时会显示此错误:

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

因此,我进入本地 CLI 并运行heroku run bash,查看当前文件和目录,发现 /app/client/build/ 不存在。这让我相信它不是使用我在我的包文件.json(不知道为什么它没有运行git push heroku master)。出于绝望,我npm install && npm run build在我的客户端文件夹(我的 React 应用程序所在的位置)内运行,现在包含 index.html 的 build 文件夹位于我的 heroku 应用程序上。但是,当我尝试查看该应用程序时,我仍然收到“未找到”错误。

我已经尝试调试了好几个小时,但不知道哪里出了问题。静态文件(build 文件夹)正在内部定义服务器.js如果你想看一看的话。


编辑:我刚刚从 .gitignore 中删除了 build 并推送到 heroku,我的应用程序现在可以运行了。因此,主要问题是我的 heroku-postbuild 脚本没有运行,尽管此文档中明确定义了名称:https://devcenter.heroku.com/articles/nodejs-support

答案1

我对这个特定问题有一个解决方案,首先,创建一个以应用程序名称命名的文件夹,并将客户端文件夹放在上面,然后转到 server.js 文件

if (process.env.NODE_ENV) {
   //static folder add
    app.use(express.static('app/client/build'));
    app.get("*", function (req, res) {
    res.sendFile(path.resolve(__dirname , "app/client/build", "index.html"));
     });
   }

之后你修改 package.json 文件

 "scripts": {
     "start": "node server.js",
     "server": "nodemon server.js",
     "heroku-postbuild": "cd app && cd client && npm install --only=dev && npm 
       install && npm run build"
     },

之后你运行文件就可以正常工作了

相关内容