TIL 026 package.json root에 없을 때 Heroku 배포하기

조성현·2021년 8월 31일
0

nodejs를 사용한 서버를 Heroku로 배포할때는 package.json이 root에 있어야 빌드가 된다.

일단, package.json에 다음 프로퍼티를 추가해주어야 한다.

"engines": {
    "node": "14.x"
  },

😢문제는 express generator를 사용한다던가. server,client 이런식으로 폴더를 나눌 경우, package.json이 root에 존재하지 않는다.

이럴 때 해결책은

  1. package.json 루트에 또 만들고 prebuild를 사용한다.

  2. git subtree를 사용한다.

git subtree push --prefix <경로> heroku main

ex) git subtree push --prefix cashbook heroku main

subtree는 코드를 공유하는 기능인데, 자세한 내용은 다음 블로그를 읽어보자
https://blog.rhostem.com/posts/2020-01-03-code-sharing-with-git-subtree

하지만 문제가 또 발생하는데, 이어서 다시 배포를 할 때이다...

heroku 공홈에서 재배포를 할 때는 force 옵션을 붙일 것을 권장하고 있다. (force 절때 쓰지말라고 배웠는데....)

git push -f heroku main

😢문제는 subtree에는 -f 옵션이 없다는 것이다...

그래서 찾은 해결책은 다음과 같다.

  1. subtree로 새 브랜치를 파고 배포
git subtree split --prefix <경로> -b deploy // 새 브랜치 파기
git push -f heroku deploy:main // 새 브랜치를 배포
git branch -D depoly // 브랜치 삭제

https://gist.github.com/tduarte/eac064b4778711b116bb827f8c9bef7b

또 다른 방법을 팀원분이 알려주셨는데,

  1. 백틱을 활용
git push heroku `git subtree split --prefix <경로> <브랜치>`:main --force

두 방법을 다 잘 작동하니, 띄어쓰기에 유의해서 잘 해결하셨으면 좋겠다.

profile
Jazzing👨‍💻

0개의 댓글

관련 채용 정보