我有一个节点应用,其入口点在这里
/backend/src/index.js
在本地,如果我尝试从项目根目录运行node ./backend/src/index.js
,我会遇到很多路径错误,但如果我cd
进入backend
文件夹并运行./src/index.js
我的节点应用运行。我假设这都是由于通过节点应用程序使用相对路径。
如何将此应用程序部署到heroku并使其正常运行?我目前正在收到像这样的503错误
2017-07-31T03:02:17.759410+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=[redacted] ... dyno= connect= service= status=503 bytes= protocol=https
在执行启动脚本之前,有没有办法告诉heroku cd
进入backend
文件夹?我可以使用Procfile
吗?
答案 0 :(得分:0)
如果您使用的是Heroku的标准NodeJS buildpack,我可以想办法让您入门。
此buildpack实际上会在您的根路径中搜索package.json
(因此这是一项要求)。在package.json
中,您可以为应用指定启动脚本,如下所示:
"scripts": {
"start": "cd backend/src && node index.js"
}
这应该将Heroku指向cd
到您的目录中,然后从那里启动服务器。您可以参考相关文档here。
答案 1 :(得分:0)
Heroku在存储库的根目录中需要一个package.json
和一个锁定文件,否则它们将导致部署失败。
但是,您可以在存储库的根目录中设置一个package.json
,以安装子目录的依赖项并运行它们的相关命令。
例如,使用yarn(您可以使用npm进行类似的操作),可以在根目录中放置一个空的yarn.lock
,并像这样放置一个package.json
:
{
"name": "my-project",
"version": "0.1.0",
"private": true,
"scripts": {
"postinstall": "yarn --cwd <subdirectory> --production=false install",
"build": "yarn --cwd <subdirectory> serve"
}
}
--production=false
是可选的,但ensures that devDependencies will be installed是可选的,因为在Heroku的环境中NODE_ENV
被设置为production
,否则不会发生。
Heroku的buildpack默认情况下会安装devDependencies,然后稍后对其进行修剪,因此,如果在部署项目时需要它们中的任何一个来构建项目,则将需要该部分。