【问题标题】:Combining many JS files with Rails Asset Pipeline将许多 JS 文件与 Rails 资产管道组合
【发布时间】:2013-03-31 13:53:06
【问题描述】:

我正在从 Rails 3.0.20 升级到 Rails 3.1.10。 (稍后我将升级到 3.2,但我希望首先在 3.1 中使用我的代码库进行更重大的更改。我没有测试套件,所以请多多包涵,因为我克服了相当多的技术债务。值得庆幸的是,该应用程序并没有那么大或复杂。)

我的应用程序中的各种视图总是有单独的 JS 文件。现在,Asset Pipeline 想要将所有这些组合到一个文件中。问题是,我的很多变量和函数名称发生冲突,通常只会导致问题。

我的假设是我需要在这里使用某种命名空间,然后在需要它的页面上的特定命名空间中初始化代码。

有没有标准的方法来做到这一点?或者,总体上有更好的方法吗?

澄清一点:我还没有准备好切换到 CoffeeScript。

【问题讨论】:

    标签: javascript ruby-on-rails namespaces asset-pipeline


    【解决方案1】:

    资产管道的基石是清单文件。默认情况下,Rails 会为 JavaScript 文件创建一个

    app/assets/javascripts/application.js
    

    此清单使用 指令 来声明资产源文件中的依赖项。这些指令之一是

    require_tree
    

    它的工作方式类似于 require 目录,但递归操作需要所有子目录中的所有文件。在我的 Rails 应用程序中,生成的 application.js 包含

    //= require_tree .
    

    这需要 JavaScript 资产文件夹中的所有文件。通过删除它,不再将所有 JavaScript 文件合并为一个。然后,您必须要求每个视图的 JavaScript 文件。这在问题JavaScript file per view in Rails 中得到了回答。


    话虽如此,请重新考虑您的计划。 毕竟 Rails 这样做不是为了惹恼您,而是有目的的。出于效率的原因,您应该尽可能少地使用 HTTP 请求。如果您的所有 JavaScript 代码都预先加载,您可能会获得更好的性能,例如由于缓存。

    【讨论】:

    • 这个答案没有说明 OP 关心的变量/函数名冲突。
    【解决方案2】:

    资产管道将允许为每个视图使用单独的 js 文件。在 app/assets/javascripts 中,您将能够为每个视图创建一个单独的 js 文件。因此,假设您有模型书籍和杂志。在 app/assets/javascripts 中,您可以为每个模型/视图拥有 books.js 和 magazines.js(或咖啡)。

    另外,如果您还没有看过http://railscasts.com/episodes/282-upgrading-to-rails-3-1,请看一看。

    【讨论】:

    • 这个答案没有说明 OP 关心的变量/函数名冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多