Rails 5 个与多个清单文件有关的问题

Rails 5 problems with multiple manifest files

我的问题

在我的 Rails 5 应用程序中,我有 2 个布局,因此我需要设置多个清单文件。

我做了什么

我做了以下事情:

  1. 这两个 layouts 有一个 user.html.erb 和一个 main.html.erb html 文件,在那里我用正确的标签链接了我的 application.jsuser.html.erb 和我的 main.jsmain.html.erb

  2. 文件加载,如果我按照localhost:3000/assets/application.js显示清单中包含的js文件的全部内容,而在/assets/main.js仅显示以下行:

    (function() {
    }).call(this);
    
  3. 我遵循了以下讨论中的说明 Rails 4 Assets Precompilation with multiple manifest files,但它们不起作用

    config.assets.precompile += %w( main.js )
    

我搜索了 Whosebug 并阅读了文档,但一直没有找到这个问题的答案。我正在使用:

* rails (5.0.1)
* sprockets (3.7.1)
* sprockets-rails (3.2.0)

更新

在 main.js 文件中,我将以下内容作为测试:

//= require jquery
//= require bootstrap-sprockets
//= require jquery.easing

已测试的解决方案

  1. 我尝试按照此说明在我的 assets.rb 中添加摘要文件,但这并没有解决问题 asset pre compilation for subdirectory manifest file
  2. 我有 Rails 5 和 Ruby 2.3.3p222。一些旧的 Whosebug 讨论表明问题是由 Ruby 2.0 引起的,他们建议 恢复到 Ruby 1.9 Javascript files are not included from manifest
  3. 最佳解决方案(我在 Whosebug 讨论中读到)是编辑 html div 和 类 以便不同布局的不同 JS 文件可以全部包含在一个清单文件中,而不会在浏览器中触发控制台错误。

我的解决方案

我的临时解决方案是,因为我有 2 个布局,其中一个 js 文件会在另一个布局中导致控制台错误,因为它们都使用相同的 ID 或 类,将是 评论我不需要的 JS 代码(因为我使用的 HTML-Layout 有许多我不使用的效果)并且不包括导致问题的整个文件(custom.js)在我的清单文件中。 我会将此文件单独包含在我的布局 main.html.erb 文件中,并带有标签。

<%= javascript_include_tag 'custom', 'data-turbolinks-track': 'reload' %>

这将解决所有问题。