将 link 大型模板资产放入 rails erb 文件的正确方法是什么?

What is the proper way to link big template assets into rails erb files?

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

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

  1. 我将提供 30MB 的精简代码并在我的应用中使用其中的一小部分。
  2. 我将不得不手动重写整个资产文件夹以使用 links 资产管道想要的方式(javascript_include_tag "file" 服务 file.js)。当然,我会通过脚本来做到这一点,但它似乎仍然是某人应该首先遇到的问题。

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

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

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

1- 组织文件结构

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

  • app/assets/javascrips/普通
  • 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 预编译 列表

您可以在 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') %>');