私はgruntを使用しており、grunt-contrib-copy
、grunt-contrib-mincss
(アプリケーションのnpm依存関係としてリストされている)などのgruntプラグインも使用しています。
また、生成されたすべてのファイルがある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
を実行する前または後に実行する一連のスクリプトをセットアップできます。 package.json
のscripts
プロパティで構成されます。 scripts
プロパティを使用すると、パッケージのライフサイクルで特定のことが発生したときにカスタムスクリプト(grunt
を含む)を実行できます。
たとえば、誰かが(Herokuを含む)がnpm install
を実行するたびにテキストをエコーしてgrunt
コマンドを実行するには、これを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
およびgrunt-cli
は、package.json
でdependency
としてリストする必要があるため、Herokuによってインストールされます。 Herokuはそれらをインストールしないため、devDependencies
の下にリストするだけでは不十分です。また、Herokuはグローバルパッケージとしてインストールしないため、Herokuで実行するには相対パスを使用する必要があります(上記で構成したとおり)。これが機能しない場合(おそらく相対パスを少し調整する必要があるでしょう)、 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のポストインストールフックにチェックインして、何人の人が大丈夫だと思われるかについて、私は決して幸せではありませんでした。 :(
さらに、哲学的なスタンスから、リリース中にビルドを行うことは、別の潜在的な障害ポイントです。
楽しみのためだけに:それはまだ確定していないので、ここに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(など)はビルドツールであり、(実際に)パッケージ化して運用環境で実行するものではありません。別のアプローチは、ビルドされたファイルをHerokuにプッシュする前に、Gruntを使用してプロジェクトをローカルに(またはCIサーバー上で)準備することです。すでに述べたように、Herokuはnpm install
プッシュ後のアプリで、最終的にアプリを準備するのに十分なはずです。
Grunt派生/構築されたHerokuアプリが、メインアプリのソースコードリポジトリとはまったく別のGitリポジトリに存在するように設定しました。そのため、grunt deploy
関連ファイルを最適化してHerokuリポジトリにコピーし、整理します(git add -A
など)、その後git Push heroku master
(または何でも)。
ライブサーバーがビルド済みのアプリパッケージの実行のみを担当している場合、懸念事項が明確に分離されているように見えます。
もちろん、YMMV、および上記の受け入れられた答えも完全に有効です。特に、Herokuのような十分に理解され安定したライブ環境では有効です。
Heroku buildpack は私には問題ありません。素晴らしいもの。
これをgrunt 4.0で動作させるには、こちらの指示に従いました https://discussion.heroku.com/t/grunt-on-heroku/98/2 私がしなければならなかった唯一の変更は、unixスタイルのスラッシュを使用するとウィンドウで失敗し、その逆も同様であるため、うなり声へのパスを削除することでした。 NPMはnode_modules/.binフォルダーでうなり声を探すので、幸いにもパスを指定する必要はありません https://npmjs.org/doc/scripts.html#path 。
gruntからcliをグローバルにインストールするように指示されている場合でも、package.jsonにgruntとgrunt-cliの両方がローカルにインストールされていることを確認してください:$:npm i -S grunt grunt-cli
次のようなpostinstallステップをpackage.jsonに追加します:"postinstall": "grunt prod"
このチュートリアルをご覧ください: https://medium.com/p/c227cb1ddc56 。カスタムビルドパックを使用して、HerokuにGruntアプリをデプロイする方法を説明します。
この投稿はRails固有ですが、なぜバックエンドフレームワークでそれを使用できず、Ruby buildpackを使用しているものと入れ替えるだけです。
解決策は、基本的にマルチビルドパックを使用し、Node/Gruntビルドパックを実行することですgrunt build
Herokuであなたのために。
重要なことは、このソリューションではビルドアーティファクトをバージョン管理にチェックインしないことです。(はい!!!)
http://www.angularonrails.com/deploy-angular-Rails-single-page-application-heroku/
Npm postinstallステップは、おそらくgruntをそこから呼び出すことができるため、おそらく最良のオプションです。ただし、 heroku-buildpack-nodejs-grunt などのカスタムビルドパックもチェックアウトする必要があります。