【问题标题】:Rails 3 JavaScript resource pipeline managementRails 3 JavaScript 资源管道管理
【发布时间】:2012-10-09 14:59:27
【问题描述】:

我想知道使用 Ruby gem 将 JavaScript 库包含到 Rails 项目中与自己包含 JavaScript 文件之间有什么区别。

我知道您可以使用 bundler 锁定 js 库的一个版本,或者使用一个命令通过 bundler 更新所有 js 库,而不是手动将 js 文件复制并粘贴到您的项目中。 Rails::Engine 类增加了多少开销,这是从 Rails 应用程序中可用的 gem 获取资产文件的唯一方法吗?是否有任何其他显着差异表明哪种方式是包含这些库的“最佳”方式?

【问题讨论】:

    标签: javascript ruby-on-rails gem asset-pipeline rails-engines


    【解决方案1】:

    Rails::Engine 类对于只提供资产的 gem 来说太过分了(即使是无害的,因为它不会有很多运行代码)。有了 Railtie 就绰绰有余了。在任何情况下,差异都可以忽略不计。

    使用外部 gem,您可以将资产保存在项目中。

    例如,angular-rails gem 提供了一些离线代码来生成东西,它不会影响你的应用程序。

    另一方面,您必须等待 gem 维护者在需要时使用新版本的库更新它。

    【讨论】:

      【解决方案2】:

      reddit 上来自 olaf_from_norwedenpost 很棒,答案是:

      让我们来看看 Twitter Bootstrap gem 的 Sass 端口是什么 实际上是:

      https://github.com/thomas-mcdonald/bootstrap-sass/blob/master/lib/bootstrap-sass.rb

      在 Rails 初始化时评估引导 gem 时(当您 启动服务器),它使用 require 加载自身的各个部分 视环境而定。

      如果 Compass Sass 框架 gem 是 加载后,它会告诉 Compass 要使用的 Rails 资产文件夹路径。

      如果您使用带有资产管道的 Rails 版本,它会加载一个 空 Rails::Engine。

      引擎只是您可以挂载的 Rails 应用程序 到其他 Rails 应用程序上。当 Rails 在运行过程中遇到引擎时 初始化时,它会查找引擎指定的路径 加载相关文件。

      在这种情况下,gemspec 在初始化期间告诉 Rails 其包含的供应商目录中的 .scss/.png/.js 文件。

      在开发模式下,Rails 将重新编译这些资产 每个请求以及主应用程序中的其他资产。

      在生产中,甚至没有加载引导 gem,因为它进入了 :assets 你的 Gemfile 组。

      希望这是有道理的。不是最好的或 最突出的解释。即使宝石已加载 生产,Rails 不会去寻找资产目录,除非 它正在编译资产。所以也没关系。

      【讨论】:

        猜你喜欢
        • 2012-04-01
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多