【问题标题】:Rails 4 - Where do vendor assets go?Rails 4 - 供应商资产去哪儿了?
【发布时间】:2013-09-04 06:44:57
【问题描述】:

在 Rails 中 this commit 之后,建议将 3rd 方资产放在 app/assets 文件夹中,或者 config.precompile 应该列出所有此类资产。

引用该线程上的用例

例如,如果我需要提供一个也有 CSS 的 jQuery 插件,一个 字体和图像精灵,我会将 .js 和 .css 添加到 供应商/资产/javascripts 和供应商/资产/样式表。我也会 vendor/assets/images 中的精灵和字体和 供应商/资产/字体,分别。添加整个供应商/资产 路径似乎有点矫枉过正,但手动单独指定每个资产 看起来很乏味(尽管这可能是设计使然)。

app/assets 中添加第三方资产将导致Rails 2 like 全局资产文件夹的问题。

我错过了什么吗? Rails 4 组织第三方资产的方式是什么。

【问题讨论】:

    标签: ruby-on-rails-4


    【解决方案1】:

    应手动明确包括第三方。这是因为这些库有许多可选部分,例如源代码、自述文件等。如果您需要其他内容(例如图像或字体),可以将此文件添加到公共文件夹中或执行以下操作:

    config/application.rb

    config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif,
    "fontawesome-webfont.ttf",
    "fontawesome-webfont.eot",
    "fontawesome-webfont.svg",
    "fontawesome-webfont.woff")
    
    config.assets.precompile << Proc.new do |path|
      if path =~ /\.(css|js)\z/
        full_path = Rails.application.assets.resolve(path).to_path
        app_assets_path = Rails.root.join('app', 'assets').to_path
        if full_path.starts_with? app_assets_path
          puts "including asset: " + full_path
          true
        else
          puts "excluding asset: " + full_path
          false
        end
      else
        false
      end
    end
    

    environment/production.rb

    config.serve_static_assets = true
    

    然后运行bundle exec rake assets:precompile RAILS_ENV=production

    【讨论】:

    • 通常,当你添加第三方 JS 库时,你只添加 release/distversion/文件夹,对吧?无论如何,您都不想复制它的源代码。并且预编译无论如何只选择 js、css。
    • 是的。但在 Rails 4 中,lib 和 vendor 中的资源(CSS、字体和图像精灵等)不再默认预编译。
    • 你应该把这些资产放在你自己的应用/资产中,以避免不需要的文件被预编译。
    • 仍然有效的一件事是将清单 index.js 放在 vendored 库(在 vendor 文件夹中)告诉 Rails 加载什么。这样your 代码和third party code 在不同的地方。请参阅this 第 2.2.2 节
    • 总而言之,require 适用于供应商文件夹。 require_tree 没有,以防止包含不需要的第 3 方文件。为此,请按照上述评论中的说明创建一个清单文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2016-08-17
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多