在我的项目的根目录下,我有一个frontend
andbackend
文件夹。这两个文件夹都包含一个package.json
列出它们的依赖关系的文件夹。npm install
部署应用程序时如何告诉 Heroku 在两个文件夹上运行?Heroku 似乎希望package.json
默认只有一个文件。我必须对 Procfile 做些什么吗?Heroku 文档似乎并没有说明我的具体问题。
谢谢您的帮助!
在我的项目的根目录下,我有一个frontend
andbackend
文件夹。这两个文件夹都包含一个package.json
列出它们的依赖关系的文件夹。npm install
部署应用程序时如何告诉 Heroku 在两个文件夹上运行?Heroku 似乎希望package.json
默认只有一个文件。我必须对 Procfile 做些什么吗?Heroku 文档似乎并没有说明我的具体问题。
谢谢您的帮助!
我刚刚使用在 heroku postbuild步骤中创建的静态文件成功地完成了这个目标,如本文所述。我有一个 React 前端(虽然可以是任何东西)和 Express API 后端。每个进程在 dev 中都有自己的端口,但在 Heroku 上部署只使用一个端口。
/frontend
)。/api
——博客假设后端保留在根目录中——任何一种方式都可以)。/frontend/package.json
通过将此行添加到(将 5000 替换为您的后端端口)从前端到后端的代理 API 请求:
“代理”:“ http://localhost:5000 ”,
将以下内容添加到后端的api/app.js
(or api/index.js
) 中(确保最后一部分是在您定义适当的后端 [或 api] 路径之后):
const path = require('path')
// Serve static files from the React frontend app
app.use(express.static(path.join(__dirname, '../frontend/build')))
// AFTER defining routes: Anything that doesn't match what's above, send back index.html; (the beginning slash ('/') in the string is important!)
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname + '/../frontend/build/index.html'))
})
/package.json
文件(请注意,使用并发包可以轻松地使用 本地运行整个应用程序npm run dev
,但仅heroku-postbuild
在此处需要): "scripts": {
"frontend": "cd frontend && npm start",
"api": "cd api && nodemon app.js",
"dev": "concurrently --kill-others-on-fail \"npm run api\" \"npm run frontend\"",
"heroku-postbuild": "cd frontend && npm install && npm run build"
},
/Procfile
有类似的东西web: node api/app.js
似乎您可以将package.json
文件放在项目的根目录并使用脚本npm i
在两个文件夹中调用。
https://devcenter.heroku.com/articles/nodejs-support#customizing-the-build-process
就像是cd front && npm i && cd ../back && npm i
但我应该说,如果它们在不同的端口上运行,它可能无法工作,因为每个 procfile 似乎只有一个 Web 进程可用。最后一点是要确认的。
您可以在Procfile中为您的项目定义几个入口点:
web: cd front && npm i && npm start
server: cd backend && npm i && npm start
但是,您至少必须升级到 Hobby。这是 7 美元/dyno/月。