クライアント側の依存関係を管理するためにbowerを使い始めたところです。すべてのファイルを にインストールするように Bower を設定しました/vendor/assets/components
。
次に、実行bower install
してファイルを評価し、bower.json
すべての依存関係をインストールします
#/bower.json
{
"name": "My-App",
"dependencies": {
"angular": "1.0.8",
"bootstrap": "3.0.0"
}
}
最後に、読んだチュートリアルの指示に従って、コンポーネント ディレクトリを GIT から削除しました。
#.gitignore
#...
# Ignore all stuff manged by bower
/vendor/assets/components
したがって、プロジェクトにはこれらのアセットがスラッグに含まれていないため、bower install
インストールするには実行する必要があります。
これは、プロジェクトから実際の宝石を分離することが賢明であるのと同じように、私には賢明に思えます。また、12 要素アプリの原則に従い、依存関係を明示的に宣言して分離します。
ただし、依存関係を除外すると、アセットのコンパイルが停止します...
ただし、Heroku にプッシュすると、アセットがまだ追加されておらず、スプロケットが評価しようとすると、アセットのプリコンパイルが失敗します。
#application.css.scss
/* ...
*= require bootstrap/dist/css/bootstrap
*= require_self
*= require_tree .
*/
bootstrap/dist/css/bootstrap
bower はまだ何もインストールしていないため、何も見つからないことがわかります。
考えられる解決策 - package.json を使用してインストール後のスクリプトを実行する
次の内容のファイルを追加することを提案するこのチュートリアルに従いました。package.json
"dependencies": {
"bower": "0.6.x"
},
"scripts": {
"postinstall": "./node_modules/bower/bin/bower install"
}
ただしbower install
、インストール後のスクリプトとしてではなく、プッシュ後、アセットのコンパイル前のスクリプトとして実行する必要があります。Heroku が Rails アプリ用の npm プリプロセッサを実行するかどうかもわかりません
bower install を実行する方法を理解するか、単にファイルを GIT に含めるかを理解する方がよいでしょうか?
これには 2 つの解決策があります。最初の最も簡単な方法は、単純にbower install
ローカルで実行し、ファイルを GIT に含めることです。これは大したことではありませんが、12 Factor App の原則に固執したいと思います。
2 つ目の解決策は、アセットのプリコンパイルが発生する前bower install
に、npm を起動して Herokuで実行する方法を見つけることです。
これは簡単な方法で実行可能ですか、それとも単純にバウアー アセットをローカルでコンパイルする方がよいでしょうか?
あとがき
最終的に私の結論は、単純にbower install
ローカルで実行し、ファイルを GIT に含めることでした。12要素の原則は、これが正しいルートではない可能性があることを示唆していますが、実際にはコストがかかることはなく、カスタムビルドパックの複雑な複雑さに入るよりも、それを好んだ.