nodejs를 사용한 서버를 Heroku로 배포할때는 package.json이 root에 있어야 빌드가 된다.
일단, package.json에 다음 프로퍼티를 추가해주어야 한다.
"engines": {
"node": "14.x"
},
😢문제는 express generator를 사용한다던가. server,client 이런식으로 폴더를 나눌 경우, package.json이 root에 존재하지 않는다.
이럴 때 해결책은
package.json 루트에 또 만들고 prebuild를 사용한다.
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 옵션이 없다는 것이다...
그래서 찾은 해결책은 다음과 같다.
git subtree split --prefix <경로> -b deploy // 새 브랜치 파기
git push -f heroku deploy:main // 새 브랜치를 배포
git branch -D depoly // 브랜치 삭제
https://gist.github.com/tduarte/eac064b4778711b116bb827f8c9bef7b
또 다른 방법을 팀원분이 알려주셨는데,
git push heroku `git subtree split --prefix <경로> <브랜치>`:main --force
두 방법을 다 잘 작동하니, 띄어쓰기에 유의해서 잘 해결하셨으면 좋겠다.