【问题标题】:What is the proper way to link big template assets into rails erb files?将大型模板资产链接到 rails erb 文件的正确方法是什么?
【发布时间】:2015-11-02 22:18:18
【问题描述】:

我正在开发一个从webarch template 开始的rails 应用程序。我知道在 public/ 文件夹中添加整个资产文件夹会将资产与我的视图链接起来,但它不会利用资产管道功能。该模板有很多插件和不同的选项,通常不会全部使用。 assets 文件夹的大小为 30MB。

我想将它放在 vendor/assets 中并将其与资产管道一起使用,但这会产生两个问题:

  1. 我将提供 30MB 的缩小代码并在我的应用中使用其中的一小部分。
  2. 我必须手动重写整个资产文件夹以使用资产管道所需的链接(javascript_include_tag "file" 为 file.js 提供服务)。当然,我会通过脚本来执行此操作,但这似乎仍然是某人应该首先遇到的问题。

因为 vendor/assets 和 public/ 文件夹似乎都不是这些文件的合适位置,所以我想要一个更好的选择(或者让后面的选项更好地工作的方法)。

【问题讨论】:

  • 正确的解决方案就是不要将 30MB 的未使用资产放入您的项目中。通常模板有一个小核心(可以包含在资产中),其余组件是可选的。挑选/调整这些文件需要时间,但值得付出努力。
  • @vemv 我经常看到这种关于 SO 的评论,如果我对你的评论做出反应,我很抱歉。这不是一个恰当的说法。我的意思是你可以说出来,但继续提供解决方案,或者什么也不说。你看,没有一种单一的编码方式,也没有一种单一的情况,有时你最终不得不做你通常会避免做的事情。 SO在这里提供帮助,而不是学校的讲座。干杯
  • @BenjaminSinclaire 什么?我给出了一个具体的、适用的建议,该建议对于许多类型的项目都是正确的。

标签: ruby-on-rails asset-pipeline assets


【解决方案1】:

当文件太大而无法合理地留在单个最小化资产文件中时,将文件保留在资产管道下的一种解决方案是按类别拆分资产,将这些类别编译到不同的最小化文件中,并在以下情况下将它们包含在您的视图中需要。

我为一个包含多个“重”javascripts 组件的应用程序执行此操作,这些组件位于我的应用程序的不同区域并且不经常使用。

1-组织你的文件结构

app/assets/javascripsapp/assets/stylesheets 中,为我们要创建的每个类别创建一个目录。例子:

  • app/assets/javascrips/common
  • app/assets/javascrips/admin
  • app/assets/javascrips/user_account

2- 创建您的清单

app/assets/javascripsapp/assets/stylesheets 中为每个类别创建一个清单文件并将它们包含在相关目录中

文件app/assets/javascrips/common.js

//= require jquery
//= require_tree ./common

文件app/assets/javascrips/admin.js

//= require_tree ./admin

文件app/assets/javascrips/user_account.js

//= require_tree ./user_account

3- 将清单添加到 rails precompile 列表

您可以在 config/application.rb 文件中执行此操作,但是当它变大时,最好创建一个初始化程序文件 config/initializers/assets.rb

Rails.application.configure do
  config.assets.precompile += %w[common.js admin.js user_account.js]
end

4- 将它们包含在您的视图和布局中,并设置您的 JavaScript 库。

将资产文件导入布局和视图。为应用程序的不同区域创建多个布局可能是一个好主意,这些区域将使用公共资产文件。使用的方法是 stylesheet_link_tag 'manifest_file'javascript_include_tag 'manifest_file'

请记住,您可能必须告诉您的 javascript 插件,它们在动态加载文件时需要使用最小化文件。对于他们,您可以使用配置 .js.erb 文件。示例:

文件app/assets/javascrips/admin/plug-in_config.js.erb

PLUGIN.config('dynamicFileName', '<%= javascript_path('manifest_file') %>');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多