我可以在Heroku上使用Bower和Rails并仍然保留bower_components目录而不是GIT吗?

Pet*_*xey 6 ruby-on-rails heroku node.js bower

我刚开始使用bower来管理客户端依赖项.我已经将Bower设置为安装所有文件/vendor/assets/components.

然后我运行bower install评估bower.json文件并安装所有依赖项

#/bower.json

{
  "name": "My-App",
  "dependencies": {
    "angular": "1.0.8",
    "bootstrap": "3.0.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,按照我读过的教程的指示,我从GIT中删除了组件目录.

#.gitignore

#...
# Ignore all stuff manged by bower
/vendor/assets/components
Run Code Online (Sandbox Code Playgroud)

因此,该项目不会在slug中包含任何这些资产,并且需要bower install运行才能安装它们.

这对我来说似乎是明智的,就像将项目中的实际宝石分离是明智的一样.它还遵循12因素应用程序的原则,并明确声明和隔离依赖项.

但是,排除依赖关系导致资产编译窒息......

但是,当我推送到Heroku时,资产预编译失败,因为尚未添加asssets,所以当sprockets尝试评估时:

#application.css.scss
/* ...
*= require bootstrap/dist/css/bootstrap
*= require_self
*= require_tree .
*/
Run Code Online (Sandbox Code Playgroud)

它发现没有什么可以找到的,bootstrap/dist/css/bootstrap因为凉亭尚未安装任何东西.

一种可能的解决方案 - 使用package.json运行安装后脚本

我已经按照本教程建议添加一个package.json包含以下内容的文件:

"dependencies": {
    "bower": "0.6.x"
},
"scripts": {
    "postinstall": "./node_modules/bower/bin/bower install"
}
Run Code Online (Sandbox Code Playgroud)

但是,bower install需要不是作为安装后脚本运行,而是需要在推送后的资产前编译脚本中运行.我也不清楚Heroku是否会为Rails应用程序运行npm预处理器

是否更好地弄清楚如何运行bower安装或只是在GIT中包含文件?

有两种解决方案.第一个也是最简单的是简单地在bower install本地运行并将文件包含在GIT中.这不是什么大问题,但我想坚持12 Factor App的原则.

第二个解决方案是弄清楚如何资产预编译发生之前启动npm并bower install在Heroku上运行.

这是否可行以任何简单的方式或者在本地简单地编译bower资产更好?

后记

我的结论最后只是在bower install本地运行并将文件包含在GIT中.虽然12因素原则表明这可能不是正确的路线,但我没有发现它在实践中有任何成本,并且更倾向于不是进入自定义构建包的复合复杂性.

ant*_*tor 3

您应该尝试使用ddollar 的 multi-buildpack。安装两个构建包时,您可以获得额外的好处,即能够在安装 Nodejs 之后但在安装 ruby​​ 构建包之前运行安装后脚本。bower install这将允许您在预编译之前使用 a 来获取资源。

我整理了一个专业提示,介绍如何处理 Heroku + Rails + Bower 场景。

https://coderwall.com/p/6bmygq