我有一个几乎是普通的create-react-app(v2)应用程序,该应用程序已连接到Express服务器,该服务器充当API服务器并被代理。在本地运行npm run dev
,因为我的包json脚本部分如下所示:
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"server": "node server --exec nodemon",
"heroku-postbuild": "npm install && npm install --only=dev --no-shrinkwrap && npm run build",
"dev": "run-p server start"
},
但是,如果我使用web: npm run dev
创建一个Procfile,这在Heroku上将不起作用,因为它告诉我找不到run-p。因此,我改为web: node server/index.js
(因为我的服务器文件位于server/index.js
。但是,这在Heroku日志中给了我以下错误:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
我认为启动服务器可以满足所有要求,因为它具有以下一行:
if (process.env.NODE_ENV === 'production') {
const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, '../build', 'index.html'));
});
}
app.listen(3001, () => console.log('Listening on localhost:3001'));
我在这里想念什么?
答案 0 :(得分:0)
在app.listen之前添加此内容:
app.set('port', (process.env.PORT || 3001));
然后在app.listen中添加3000:
app.listen(app.get('port'), () => console.log('Listening on localhost:3001'));
这应该在本地相同。