如何将 React s-s-r 应用程序部署到 Heroku?

Posted

技术标签:

【中文标题】如何将 React s-s-r 应用程序部署到 Heroku?【英文标题】:How to deploy a React s-s-r application to Heroku? 【发布时间】:2020-09-02 11:10:52 【问题描述】:

我有一个简单的运行反应服务器端应用程序。

GitHub Link 对于 repo,在本地环境中,我有一个使用 npm start 运行的构建脚本,它启动客户端和服务器构建,然后我有一个监听器来监听文件的变化。这种设置在本地运行良好。

"scripts": 
    "start": "npm run dev",
    "dev": "npm-run-all --parallel dev:*",
    "dev:server": "nodemon --watch build --exec \"node build/bundle.js\"",
    "dev:build-server": "webpack --config webpack.server.js --watch",
    "dev:build-client": "webpack --config webpack.client.js --watch"
  ,

我尝试将这些更改作为产品应用程序部署到heroku here,但出于某种奇怪的原因,它永远无法正常工作并返回 503 。我没有对 package.json 中的构建脚本添加任何更改,并尝试按原样部署。

我认为它应该可以工作,因为build log dosent 在 heroku 上给出任何错误,但是在尝试访问应用程序时它显示错误并要求我检查应用程序日志,但我没有使用 heroku cli,也不打算使用它,和

考虑从 github 自动部署。

我对脚本很陌生/主要构建脚本试图了解更多关于它们的信息。

我们如何确保部署这个小的 React s-s-r git repo 并且我是 可以访问主页。

【问题讨论】:

【参考方案1】:

我没有使用 heroku cli,也不打算使用它

您应该而且我真的建议您这样做,因为这是查看构建后发生的错误、应用崩溃的原因以及查看完整日志的最佳方式。即使您可以从 heroku dashbord 中看到日志(更多 -> 查看日志),但这只会给您提供日志的尾部。

我们如何确保这个小型 React s-s-r git repo 已部署并且我能够访问主页。

确保服务器在右侧监听port 通过使用process.env.PORT 作为heroku 公开一个动态端口。

const port = process.env.PORT || 3000
app.listen(port, () => 
    console.log('Listening on Port ' + port);
)

在 heroku 上,NODE_ENV 环境变量默认设置为production, 这意味着heroku将在构建后修剪devDependencies, 但在您的情况下,您仍然需要这些依赖项才能使用 webpack 启动您的应用程序。

您可以通过两种方式解决此问题:

    通过添加build 脚本自定义您的构建过程:

    来自你的 github repo :

    "start": "webpack --config webpack.client.js; webpack --config webpack.server.js; node build/bundle.js"
    

    "scripts": 
        "start": "node build/bundle.js",
        "build": "webpack --config webpack.client.js & webpack --config webpack.server.js",
        "build:start": "webpack --config webpack.client.js && webpack --config webpack.server.js && node build/bundle.js",
    
    

    NODE_ENV 设置为任何其他值以跳过修剪您的 devDependencies

    heroku config:set NODE_ENV=development //(Another reason to use the CLI)
    

查看link了解更多详情

【讨论】:

非常感谢,我仍然不热衷于使用 CLI,因为我不太担心一些复杂的连接,但我明白你的意思并感谢指出的细节。只是对于担心设置配置的人,他们可以转到dashboard-classic.heroku.com/appsyour-app-name/settings 并设置配置变量。如果您能添加一些关于我们从何处获取这些信息的详细信息,我也将不胜感激,这将是脚本和 heroku 所查看的命令。对我和一些寻找类似答案的人来说,这将是一本很好的读物 我的回答主要是根据回答中提供的链接(devcenter.heroku.com/articles/…)。这里还有一些有用的链接devcenter.heroku.com/articles/…和help.heroku.com/P1AVPANS/…

以上是关于如何将 React s-s-r 应用程序部署到 Heroku?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过云功能将 Nuxt s-s-r 应用部署到 Firebase?

在 AWS 上使用 NextJS s-s-r 部署 React 应用程序的最便宜方法? [关闭]

使用 firebase-functions 部署基于反应的 s-s-r 应用程序时出错

将 Nuxt JS s-s-r 应用程序部署到 Google Cloud App Engine 标准

React/nextJS:如何调试 s-s-r react 应用的不同节点?

next.js 的缺点超过 create react app + redux + s-s-r [关闭]