How to use javascript/css plugins in Rails 4

1458 查看

Rails4 中用 bootstrap 或者 extjs 等库时,由于assets pipeline 的关系现在普遍被认为最好的做法是用 gem,比如 bootstrap gem,个人不喜欢这种做法。
首先,不是所有的库都有一个现成的 gem, 你得自己去打包一个gem。然后即使有现成的 gem,也不能保证他是最新版本的,自己打包同理,你需要把这个 gem 与原版的库保持同步,还是有点蛋疼。
几种方法:

1 使用cdn。

很多大公司或云服务商提供了常用库的cdn。用这些cdn的好处多多,一来对用户来说速度更快,二来对开发者节省流量和空间,升级这些库只要改一个版本号,方便的很。

百度云开放平台:http://developer.baidu.com/wiki/index.php?title=docs/cplat/libs
七牛云存储:http://www.staticfile.org/

2 搭建静态文件服务器。

如果要用的库没有在上面的开放cdn中,自己做一个静态文件服务也是很好的选择。可以方便的设置缓存规则,独立的发布更新。而且这个静态服务也未必要自己搭建,比如可以用脚本将静态文件上传到具有 cdn 功能的云存储服务器。
rails这么做是很方便的,https://rubygems.org/gems/rails-assets-for-upyun

3 万能的 public

既没有 cdn,也没有静态文件服务器,宁愿用 public 目录也不用 gem。放到pulic的好处是放过去就能用,不需要考虑css中的图片相对路径等问题。
当然也有所牺牲。不能享受 assets pipleline 的压缩、版本管理。但是这个对于称为“库”的静态文件来说不是问题:
首先库必然是要引用 release version 而不是 devlopment version,所以压缩、混淆一般是已经做过的,比如你要添加的应该是 *.min.js 而不是 *.js,而且静态文件必然要设置 gzip 和 expire 等 header 的, 大小方面问题也不大。
版本方面也好说,/public/bootstrap3.1/这么放是合理的,引用时加个版本号简单的很。如果还想接受assets hosts配置的控制也简单,写个 helper,比如js_import(),css_import()