Heroku如何部署子目录?

28

我想要部署一个Node应用程序,但是我在代码结构方面遇到了问题。该应用程序已在顶层进行git初始化,并且看起来像:

App (git tracked in remote repo)
- .git
- server
- client
- plugin
- extras

由于Heroku要求我只能直接推送包含package.json构建文件的服务器目录,我不确定如何设置我的目录。我希望可以从"App/server"文件夹部署Heroku,但仍然像现在一样git pull/push整个应用程序:

App (git tracked in remote repo)
- .git
- server (can run 'git push heroku master' for just this folder)
  - .git (?)
- client
- plugin
- extras

我该如何用最简单的方法实现这个目标?我了解了git子模块,但似乎有点复杂,我想确认一下。非常感谢,来自一个Git新手。

3个回答

38

2

Heroku要求在存储库的根目录中提供一个package.json和一个锁定文件,否则部署将失败。

但是您可以在存储库的根目录中设置一个package.json,为子目录安装依赖项并运行它们的相关命令。

例如使用yarn,您可以在根目录中放置一个空的yarn.lock和一个package.json

{
  "name": "my-project",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "postinstall": "yarn --cwd server --production=false install",
    "build": "yarn --cwd server serve"
  }
}

--production=false 确保在 Heroku 的环境中,NODE_ENV 被设置为 production 的情况下也会安装 devDependencies,否则这些依赖不会被安装。详见Yarn 文档


1

或者,您可以使用git subtree在GitHub上创建一个heroku分支:

git subtree push --prefix server origin heroku

你可以使用Heroku Button将其部署到Heroku上。只需在服务器目录中添加一个app.json和一个带有按钮的README.md即可:
[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy)

Deploy

并让Heroku处理其余部分。

你能否分享更多关于如何在子文件夹中使此按钮工作的信息?我已经将app.json和README.md放在我的子文件夹中,但链接仍然试图从根目录获取app.json。 - Scott Carlson
1
@ScottCarlson 在你的主要 README.md 文件中,将按钮标记更改为 [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/roninbar/kwik-e-mart/tree/heroku)(将 roninbar/kwik-e-mart 替换为你的 GitHub 用户名/仓库)。 - Ron Inbar
@ScottCarlson 或者在点击按钮之前切换到 GitHub 上的 heroku 分支。 - Ron Inbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接