Development Tip

Grunt를 사용하는 노드 앱을 Heroku에 배포하는 방법

yourdevel 2020. 12. 10. 21:25
반응형

Grunt를 사용하는 노드 앱을 Heroku에 배포하는 방법


나는 툴툴 거리는 소리를 사용하고도 꿀꿀 플러그인 좋아 grunt-contrib-copy, grunt-contrib-mincss(내 응용 프로그램에 대한 NPM 종속성으로 나열된 것을).

또한 생성 된 모든 파일이있는 npm_modules폴더와 public폴더를 커밋하지 않습니다 . 그리고 grunt build내 서버를 배포하고 설정 한 후 내 앱을 빌드하는 방법 ( 명령이 있음) 을 알 수 없습니다 (이미 public폴더를 찾고 있음 ).

와 같은 것을 보았지만 grunt-heroku-deploy업로드하기 전에 커밋하는 것이 좋지 않은 것 같습니다. 부드러운 결정이 있을지도 몰라요 ... 어떤 생각이라도?


npm은 postinstall귀하가 찾고 있는 단계에 대한 지원을 제공합니다 .

node.js heroku 빌드 팩은 빌드 종속성을 해결하기 위해 heroku로 푸시 할 때이 명령을 실행합니다.

$ npm install --production

https://devcenter.heroku.com/articles/nodejs-support#build-behavior

npm 문서를 살펴보면 npm install패키지를 실행하기 전이나 후에 실행할 일련의 스크립트를 설정할 수 있습니다 . scripts속성 에서 구성됩니다 package.json. scripts속성을 사용 grunt하면 패키지 수명주기에서 특정 상황이 발생할 때 사용자 지정 스크립트 (포함 ) 를 실행할 수 있습니다 .

예를 들어, grunt누군가 (Heroku 포함)가 실행될 때마다 일부 텍스트를 에코하고 명령을 실행하려면 npm install다음을 추가하십시오 package.json.

{
  ...
  "scripts": {
    "postinstall": "echo postinstall time; ./node_modules/grunt-cli/bin/grunt <your task name>"
  },
  ...
}

https://npmjs.org/doc/scripts.html

중요한주의 사항 :

  • postinstall스크립트 에서 grunt 바이너리의 경로를 변경해야 할 수도 있습니다 grunt. 명령이 실행되지 않으면 오류 출력을 확인하십시오 .
  • grunt그리고 Heroku에 의해 설치되도록 당신의 grunt-cli목록에 있어야합니다 . Heroku가 설치하지 않기 때문에 아래에 나열하는 것만 으로 는 충분하지 않습니다. 또한 Heroku는 전역 패키지로 설치하지 않으므로 Heroku에서 실행하려면 상대 경로를 사용해야합니다 (위에서 구성한대로).dependencypackage.jsondevDependencies

이것이 작동하지 않는다면 (상대 경로를 약간 조작해야 할 것입니다), Heroku 용 커스텀 빌드 팩 작성을 고려할 수 있습니다 .

최신 정보

0.4부터 grunt패키지에는 grunt이제 grunt-cli패키지의 일부인 바이너리 가 더 이상 포함되지 않습니다 . 이를 반영하기 위해 답변이 업데이트되었습니다.


이것은 Heroku Platorm API slugrelease기능이 메인 라인에 포함될 때 대부분 해결 될 것으로 보입니다 . 이 시점에서 코드를 로컬 (또는 CI 서버)에서 빌드하고 패키징 한 다음 API 호출을 통해 heroku로 보내고 거기에서 릴리스 할 수 있습니다.

아직 베타 기간 중이며 2013 년 12 월 19 일에만 발표되었습니다.

https://devcenter.heroku.com/articles/platform-api-deploying-slugs

생성 된 코드를 git 또는 NPM postinstall hook에 체크인하는 데 얼마나 많은 사람들이 괜찮아 보이는지에 대해 결코 행복하지 않았습니다. :(

또한 철학적 입장에서 볼 때 릴리스 중에 빌드를 수행하는 것은 또 다른 잠재적 인 실패 지점입니다.


재미를 위해 : 아직 완성되지 않았으므로 여기에 함께 던진 bash 스크립트가 있습니다. 배포 브랜치에서 코드를 빌드하고 커밋하고 heroku에 배포 한 다음 배포 브랜치를 제거하는 데 사용할 수 있습니다. (저는 bash 배포 스크립트의 팬이 아니기 때문에 플랫폼 API 추가를 정말 기대하고 있습니다)

#!/bin/bash
set -e 

# Delete current deploy branch
git branch -D deploy
# Create new deploy branch based on master
git checkout -b deploy
# Grunt comands to build our site
grunt build:production
# the dist/ directory is in my .gitignore, so forcibly add it
git add -f dist/
git commit -m "Deploying to Heroku"
# Push it up to heroku, the -f ensures that heroku won't complain
git push heroku -f deploy:master
# Switch it back to master
git checkout master

Grunt (et al.)는 빌드 도구이지, 실제로 패키징하고 프로덕션에서 실행해야하는 것이 아닙니다. 다른 접근 방식은 빌드 된 파일을 Heroku에 푸시하기 전에 Grunt를 사용하여 프로젝트를 로컬로 (또는 CI 서버에서 더 잘) 준비하는 것입니다. 이미 언급했듯이 Heroku는 npm install푸시 된 후 앱에서 작업을 수행하므로 최종적으로 앱을 준비하기에 충분합니다.

I have it set up so that the Grunt derived/built Heroku app lives in a totally separate Git repo to my main app source code repo. So that when I do a grunt deploy it optimises and copies the relevant files to the Heroku repo, tidies it up (git add -A etc.) and then git push heroku master (or whatever).

It seems like a cleaner separation of concerns if your live servers are only responsible for running a pre-built app package.

YMMV of course, and the accepted answer above is totally valid too ... especially on a well understood and stable live environment like Heroku.


Heroku buildpack works fine for me. Great stuff.


To get this working with grunt 4.0 I followed the instructions here https://discussion.heroku.com/t/grunt-on-heroku/98/2 . The only change I had to make was to remove the path to grunt as using unix style slashes would make it fail in windows and vice versa. Luckily you don't even need to specify the path as NPM will look for grunt in the node_modules/.bin folder https://npmjs.org/doc/scripts.html#path.

  1. make sure you have both grunt and grunt-cli installed locally in your package.json even if grunt tells you to install the cli globally: $: npm i -S grunt grunt-cli

  2. add a postinstall step to your package.json that looks like this: "postinstall": "grunt prod"


Check out this tutorial: https://medium.com/p/c227cb1ddc56. It explains how you can deploy a grunt app on Heroku with a custom buildpack.


The npm postinstall step is probably your best option, since you can invoke grunt from there. But you should also check out a custom buildpack, such as heroku-buildpack-nodejs-grunt.


This post is Rails-specific but I don't see why you couldn't use it with any back-end framework and just swap the Ruby buildpack with whatever you're using.

The solution is basically to use multi buildpacks, and have the Node/Grunt buildpack run grunt build for you right on Heroku.

Significantly, this solution does not have you check build artifacts into version control. (Yay!!!)

http://www.angularonrails.com/deploy-angular-rails-single-page-application-heroku/

참고URL : https://stackoverflow.com/questions/13784600/how-to-deploy-node-app-that-uses-grunt-to-heroku

반응형