我可以在Heroku上使用Bower和Rails,并且仍然保持Gower的bower_components目录不变?
我刚开始使用bower来pipe理客户端依赖项。 我已经将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
运行以安装它们。
这对我来说似乎是合情合理的,就像将实际gem与项目脱钩是明智的一样。 它也遵守12因子应用程序的原则,并明确声明和隔离依赖关系 。
但是,排除依赖性会导致资产编译呛…
但是,当我推到Heroku时,资产预编译失败,因为还没有添加配套,所以当链轮试图评估:
#application.css.scss /* ... *= require bootstrap/dist/css/bootstrap *= require_self *= require_tree . */
它发现在bootstrap/dist/css/bootstrap
中找不到任何东西,因为bower还没有安装任何东西。
一个可能的解决scheme – 使用package.json来运行安装后的脚本
我已经按照这个教程build议添加一个package.json
文件,内容如下:
"dependencies": { "bower": "0.6.x" }, "scripts": { "postinstall": "./node_modules/bower/bin/bower install" }
然而, bower install
需要不是作为安装后脚本运行,而是作为推后预置资源编译脚本运行。 我也不清楚Heroku是否会为Rails应用程序运行npm预处理器
弄清楚如何运行bower install或只是在GIT中包含文件是否更好?
有两个解决scheme。 第一个也是最简单的就是简单地在本地运行bower install
,并将这些文件包含在GIT中。 这不是什么大问题,但我想坚持12因子应用程序的原则。
第二个解决scheme是在资产预编译之前找出如何启动npm并在Heroku上运行bower install
。
这是可行的任何简单的方法,还是更好地简单编译本地资产资产?
后记
我最后的结论是简单地在本地运行bower install
,并将文件包含在GIT中。 尽pipe12因素原则表明这可能不是正确的路线,但是我并没有发现它在实践中有任何成本,并且倾向于而不是陷入定制组装复杂的复杂性。
你应该尝试使用ddollar的多buildpack 。 当安装两个buildpack时,你可以在安装nodejs之后,安装ruby buildpack 之前运行postinstall脚本。 这将允许您在预编译之前使用bower install
来降低您的资产。
我已经把一个protip放在一起了解如何处理Heroku + Rails + Bower场景。
- 客户端模块工作stream程:(Browserify + npm + gulp)或(RequireJS + Bower + gulp)?
- 使用grunt编译less量内存问题
- bower安装后缺lessbower_components文件夹
- Nuget软件包具有“恢复软件包的构build”function,有什么function,有什么function或节点
- 我在哪里注册我的JS,以便它被添加grunt?
- 如何自动完成在我的Node.js项目中编译前端框架(如Twitter Bootstrap)的任务?
- 未findnpm:命令。 节点已安装时如何重新安装NPM? NPM去了哪里?
- 我可以在没有Bower或NPM的情况下安装Angular Material Library吗?
- 鲍尔没有从bower.json安装