Javascript 依赖项在我的 Rails 应用程序中不断增长,这导致了一些问题。一方面,由于数量众多,因此很难跟踪和更新不同 Javascript 库的版本。起初我试过turning them into gems ,但后来我必须管理这些。有些已经是 gem (如主干 rails ),但我想要一个一致的包管理器。
所以我正在调查 Bower ,“网络包管理器”。部分博文from kaeff和 from af83一直有帮助,但我仍然遇到问题。我希望这个问题可以引出人们可以用来为他们的项目找到最佳解决方案的各种答案。
我特别希望看到在 Heroku 部署中通过 Bower 管理 Assets 的建议。
请您参考如下方法:
一种方法是使用允许您 application.js
的 sprockets 版本。需要 Bower 定义的包。这个特性是在 Sprockets 2.6 中添加的,Rails 3.x 不允许你捆绑 due to a version restriction .要获得该功能,您可以捆绑 gem "sprockets", "2.2.2.backport1"
.
这将使 Sprockets 开始在 vendor/assets/components
中寻找 Assets 也。路径是供应商/组件,因为 Bower 包也可以包含 CSS 或图像 Assets ,而不仅仅是 Javascript。当您需要包时,Sprockets 知道要包含哪些 Javascript 的方法是阅读 bower.json
main
的文件属性,表示管道应包含哪些文件。这里的一个问题是,许多 Bower 包不提供此属性或提供假定 RequireJS 可用的主要来源(例如 d3 )。你可以看到用 bower list --map
定义了哪些 source main .
当main
不适合你,你可以简单地使用 Bower 来管理单个远程 JS 文件而不是包。 Josh Peek 有 a gist that demonstrates this . Bower 最新版本预计bower.json
而不是 component.json
所以我更新了步骤:
$ npm install -g bower
$ mkdir -p vendor/assets
$ cd vendor/assets/
$ curl https://raw.github.com/gist/3667224/component.json > bower.json
$ bower install
那个特别
bower.json
加载 jQuery。然后在您的
application.js
您可以简单地
//= require jquery
和 sprockets 会在您的
vendor/assets/components
中找到它.要添加新的依赖项,只需将它们包含在您的
bower.json
中。并运行
bower install
再次,例如:
{
"dependencies": {
"jquery": "http://code.jquery.com/jquery-1.8.1.js",
"d3": "http://cdnjs.cloudflare.com/ajax/libs/d3/3.0.8/d3.js"
}
}
如果您想管理您的
lib
和
vendor
一个配置文件中的 Assets ,您可以使用
bower-rails ,但使用
lib
没有多大意义.该 gem 还提供了一些 Rake 任务,但除了基本的 Bower 命令之外,它们什么都不做。
据我所知,在 Assets 编译期间还没有办法根据需要安装 Bower。因此,如果您使用 Heroku 之类的部署环境,则需要提交
vendor/assets/components
目录并通过
bower
更新它命令。
如果您能在
application.js
中使用一个指令来要求整个 Bower 依赖集,那就太好了。 .
gist from kaeff说明如何创建
require_bower_dependencies
指示。目前还没有 gem 可以为您执行此操作。在此之前,您必须在
bower.json
中声明每个依赖项。和
application.js
.