应用程序仓库: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"
},
之后你运行文件就可以正常工作了