Rails最佳实践:手动添加Javascripts或使用gem?

时间:2014-02-22 18:28:35

标签: javascript ruby-on-rails ruby assets

我对Rails很陌生,我不确定在添加资产时最佳做法是什么。

有人能告诉我在资产中使用Javascripts与使用相应的gem相比的优点和缺点吗?

我找到几乎所有我想要使用的javascript库的gems。例如,IntroJS。我应该使用gem还是下载javascript并在我的资产中拥有库?

5 个答案:

答案 0 :(得分:3)

如果gem没有提供任何助手或生成器,那么通常只是方便,您可以通过Gemfile轻松更新资产的版本。这很好,只要宝石本身在版本上与实际来源相对较近。

我通常从宝石开始,确保它定期更新,然后如果我真的需要移动到源。

我最近也开始在某些JS源代码中使用bower,并且有一个补充bower-rails gem,它提供了一些类似Bundler的功能。真的很甜蜜!

答案 1 :(得分:2)

我更喜欢使用直接javascript源vs gem,因为:

  • 使前端逻辑独立于rails。与99%使用js库的其他项目类似。
  • 版本更新。可能会更新您的gem以指向最新的js版本,稍后。选择版本的灵活性要小得多。
  • 主要原因是手动修改:即使在一些优秀的js / jquery库中,我也遇到过一个未解决的问题/错误,你可以更容易地纠正它通过快速编辑源代码中的某些行,或某些用户发布的某些修复程序尚未发布到稳定版本等等。使用gem需要覆盖它(不像覆盖ruby模块那么容易:))或者fork gem没有提供未来价值。

答案 2 :(得分:1)

我使用gem只有一个原因:

防止存储库出现不必要的破解

您需要更新Javascript库,这种情况经常发生。如果将JS库直接引入应用程序,则在提交时代码库将被污染不必要的信息。

使用宝石。如果它不存在,创建一个,这很简单。如果当前gem未更新,请发送拉取请求或使用fork。

答案 3 :(得分:1)

这是针对专业人士与缺点列表的尝试。

将Gems用于Javascript库:

优点:

  • 它将您的JS依赖项与您的其他项目依赖项保持在Gemfile中。
  • 使用Gemfile可以将Javascript库分组到特定环境中。
  • 在项目中添加Gem会更快更清洁。比较:

    使用Gem:

    添加JS库
    • Gemfile
    • 中指定宝石
    • $ bundle install
    • {li> requireapplication.js

    手动添加Javascript库:

    • 从源代码下载Javascript库。
    • 复制到资产目录。
    • (可选)删除旧资产。
    • {li> require application.js

缺点:

  • 您的项目现在还有一个依赖项的位置:Gemfileassets目录。
  • 并非每个Javascript库都有Gem。
  • 为每个没有Gem的JS库创建Gem非常耗时。
    • 如果你将你的Gem推送到rubygems.org,你现在负责让Gem更新库中的版本更新。
    • 如果你把编译好的Gem留在本地,你把它放在哪里?同时更新到最新版本的JS库,需要你重新打包那些繁琐的Gem。

我的意见是同时使用。

对于具有与之关联的维护良好的Gem的Javascript库,请使用Gem。对于没有Gem的Javascript库,将lib复制到资源,但保持整体。通过将覆盖放在单独的文件中来自定义库。

这应该使库升级尽可能轻松。

另外,在你的application.js中,为了清楚起见,在(宝石或资产)中添加一条评论,说明你在哪里包括图书馆。

答案 4 :(得分:0)

  1. 当您使用资产管道时,您的用户的浏览器只会提出一个获取javascript的请求

  2. 当您手动添加jquery时,通过提供CDN的链接,用户已经下载了jquery并且不需要再次下载它的好机会

  3. 我也是rails的新手,想知道更多=)

    <强>更新 在我的项目中有很多js,所以我去了宝石和一个请求所有的js。更容易(对我来说)更新一堆Gemfile而不是潜入每个项目的来源