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에서 실행하려면 상대 경로를 사용해야합니다 (위에서 구성한대로).dependency
package.json
devDependencies
이것이 작동하지 않는다면 (상대 경로를 약간 조작해야 할 것입니다), Heroku 용 커스텀 빌드 팩 작성을 고려할 수 있습니다 .
최신 정보
0.4부터 grunt
패키지에는 grunt
이제 grunt-cli
패키지의 일부인 바이너리 가 더 이상 포함되지 않습니다 . 이를 반영하기 위해 답변이 업데이트되었습니다.
이것은 Heroku Platorm API slug
와 release
기능이 메인 라인에 포함될 때 대부분 해결 될 것으로 보입니다 . 이 시점에서 코드를 로컬 (또는 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.
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
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
'Development Tip' 카테고리의 다른 글
Bash if 문에서 대괄호는 언제 필요합니까? (0) | 2020.12.10 |
---|---|
NameError : 'reload'이름이 정의되지 않았습니다. (0) | 2020.12.10 |
CSS 전역 변수 만들기 : 스타일 시트 테마 관리 (0) | 2020.12.10 |
Solr 인덱스 대 저장 (0) | 2020.12.10 |
Android Studio 렌더링 문제 : 다음 클래스를 찾을 수 없습니다. (0) | 2020.12.10 |