Rails 资产管道需要来自 public 文件夹?

Rails asset pipeline require from public folder?

要求资产位于 public 文件夹下是一种好做法吗?例如我在 public/mythirdparyjs 文件夹下有很多 javascript,我想让这些 javascript 文件仅可用于特定页面,最好的方法是什么?

第三方 js 文件应该在您的 vendor 文件夹中。一旦您为生产预编译它们,它们将自动移动到您的 public 文件夹中。要在特定页面上调用某些文件,您需要删除 require_tree 指令并注意在您的 application.js 资产文件中调用了哪些文件。在每个视图页面 (html.erb) 的底部,您可以将以下内容添加到 运行 仅页面特定的 js:

<%= content_for :javascript do %>
  <script type='text/javascript'>
    YOUR FUNCTIONS HERE
  </script>
<% end %>

然后在您的 application/layout 视图底部的结束正文标记之前,您应该添加:

<%= javascript_include_tag params[:controller] if Rails.application.assets_manifest.assets["#{params[:controller]}.js"] %>
<%=yield :javascript %>

然后,这将 运行 逐页查看任何 js,并在相应控制器的 js 资产文件中包含任何文件的任何 require 语句。

更新以解决评论:如果您安装了 gem,然后需要某些 js 文件,则应从 application.js 中的 app/assets/javascripts 文件夹中获取这些文件文件(如果您希望 gem 在整个应用程序中可用)或在控制器特定的 js 文件中,如果您只需要在几个页面上使用该功能。例如,angular gem 可能在整个应用程序中使用,因此您可以将 //=require 语句添加到 app/assets/javascripts 文件夹中的 application.js 文件中。如果您手动下载一些 js 库,您应该将它们放在 vendor/javascripts 文件夹中,但是您仍然需要在 app/assets/javascripts 文件夹文件中需要的地方。