Gem gem 包使用中,对相关 js, css 引用问题

luffycn · 2015年01月15日 · 最后由 ericguo 回复于 2015年01月16日 · 2986 次阅读

在使用一些 gem 时,虽然在 gemfile 中引用了 一般都还要额外的在 application.js, application.css 额外的 require 相关的 js, css 文件 请问这是什么原因了? 为何不能在 gem 中自己就自动加载这些 js,css,还要多操作一步,自己引用?

另外一个疑问是,如果几个相同的 gem 都使用了 bootstrap 或者同一种类库 会不会导致多次引用同一些 JS,CSS 的问题,rails 是怎么处理这个问题的?

你两个问题不是冲突了么。

@Rei 这个问题确实理解起来是冲突,一开始没注意到

应该这么说,假设 A gem 中引用了 bootstrap B gem 也引用 bootstrap

我的问题是, 在某个项目中都用到 A,B 两个 gem, 如果能做到 gem 中自己加载 js, css 的话,就不需要在项目的 application 中手动 require 了 但现在是需要自己手动 require,这是什么原因了

当然,实际情况是需要自己手动 require,所以避免了重复引用的问题

如果你的 gem 需要 bootstrap 支持,应该 require bootstrap-sass 这个 gem。

#2 楼 @luffycn 你应该举 jquery 的例子,rails 默认引入了 jquery,那么使用例如 ckeditor gem 的时候里面也包含 jquery,我没有具体看过,但我可以确定他一定有如下机制

if(window.jQuery === undefined) {
  // 引入jquery
}

或者是

 <!-- 加载jQuery1.5.2版本 -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
var jQuery_1_5_2 = $.noConflict(true);
</script>

虽说 jquery 有自己的一套机制,但是我觉得他们一定会做的,不然这个 gem 就有待改进。

@ericguo 感谢回复,不过你不明白我问的问题是什么,我不是问怎么引入 bootstrap,而是问,假如我的一个项目中使用了 A,B 两个 GEM,如果这两个 gem 同时使用了某些 JS,CSS,他们是如何避免包重复引用的,这里的 bootstrap, 只是举例子说明,也有可能是 phantomjs, slimer 或者是其它的 CSS 之类的包

@flowerwrong 总算有人明白我在说什么了,感谢。。。你的思路是比较靠谱的

#5 楼 @luffycn ckeditor你也应该用 gem,然后 jquery-rails 提供 jquery,所以不会冲突,或者说你需要手工处理冲突。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号