Итак, пару вещей, которые я заметил, основаны на том, что вы поделились здесь. Вы не используете раздел engines
вашего package.json
файла, чтобы указать версию Node.js для использования в Heroku. Это будет выглядеть примерно так:
{
"name": "server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"engines": {
"node": "9.3.0",
"npm": "5.6.0"
},
Вы также увидите выделенную выше версию npm
, Node.js поставляется в комплекте с npm, поэтому в большинстве случаев вам не нужно указывать отдельную версию npm. Однако, если вы намеренно используете другую версию npm локально, вы можете указать ту же версию npm в Heroku.
Наконец, есть шаги сборки Heroku, и я не вижу этого в вашем основном файле package.json
. Имейте в виду, что то, что я написал здесь, не относится к вашему файлу create-react-app
package.json
, потому что оно будет удалено при развертывании в Heroku. create-react-app
перестанет существовать в Heroku.
Так что для конкретных действий Heroku вы захотите добавить что-то вроде этого в ваш основной package.json
файл:
"heroku-postbuild":
"NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build --prefix client"
Что касается того, что вы добавили на свой сервер, попробуйте написать это так:
if (process.env.NODE_ENV === 'production') {
// Express will serve up production assets
// like main.js or main.css
app.use(express.static('client/build'));
// Express will serve up the index.html file if
// it doesnt recognize the route
const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}
Кроме того, я предполагаю, что это в вашем основном файле index.js
, и вы также должны иметь эти две строки кода в нижней части файла:
const PORT = process.env.PORT || 5000;
app.listen(PORT);