【问题标题】:Duplicated jquery definition using grails assets使用 grails 资产的重复 jquery 定义
【发布时间】:2017-04-15 16:33:11
【问题描述】:

如果我有两个依赖于 jquery 的独立资产并在同一页面中使用这两个资产,则 jquery js 被包含两次。

file1.js
//= require jquery
//= require plugin1.js

file2.js
//= require jquery
//= require plugin2.js

在 HTML 文件中:

<asset:javascript src="file1.js" />
<asset:javascript src="file2.js" />

如何实现只包含一个 jquery?

【问题讨论】:

  • 真的很重要吗?第二个调用将从浏览器缓存中提供。
  • 当你使用 twitter bootstrap JS 时很重要。他们将初始化函数绑定到 $ 变量。但是当你从你的脚本中访问这些函数时,你会访问不同的 jquery 变量,然后你就没有这些函数了。
  • 两个都不要包含jquery?
  • 但是如果我在其他需要 jquery 的网页中单独使用 file2.js 怎么办?在使用资产插件之前,这在 Grails 2 中从来都不是问题,它可以解决依赖关系。
  • 老实说,清单文件的重点就是在一个文件中定义所有依赖项。为什么要使用两个清单?

标签: grails asset-pipeline assets


【解决方案1】:

似乎在 3.0.0 版本的 grails-asset-pipeline 中添加了重复数据删除 https://github.com/bertramdev/asset-pipeline/commit/f8bd3d701a5fe14a30f5d89c6e8796f590d4643b#diff-0a3b83b6f81080c1f7f0486f9d5ae1a6

此功能尚未记录,但根据源代码,我们使用以下语法确保在同一请求中删除重复项:

    <asset:javascript src="myScript.js" uniq="true"/>

【讨论】:

    【解决方案2】:

    这就是资产管道的工作原理。如果您的页面需要这两个文件,请创建一个新清单

    file3.js
    
    //= require file1.js
    //= require file2.js
    

    然后只在页面上包含file3

    &lt;asset:javascript src="file3.js" /&gt;

    【讨论】:

    • 我很困惑,因为在以前版本的 Grails (2.xx) 中,使用了 Resources 插件,这从来都不是问题。那么依赖的js文件会只解析一次吗?例如如果 file1.js 和 file2.js 都需要 jquery,就像上面的例子一样?
    • 是的。我不确定你的困惑来自哪里,因为这是一个与 Resources 完全不同的插件,因此它的工作方式不同。
    • 我知道这是一个不同的插件,但它在 Grails 中使用。而且由于它是较新的版本,人们会期望它以与旧 Grails 中类似的方式使用。在文档中,没有关于您应该在 HTML 中放入什么以及如何(不)解决重复的问题,所以我认为您使用旧方式。感谢您的澄清!
    • 还有一个问题:我有common.js,每个页面都使用它。这个common.js 依赖于jquery.js。现在在一个特定页面上,我有file1.js,它也依赖于jquery.js。是否可以在g:layoutHeader 中包含common.js,这样我就可以在我的所有页面中使用它,而且还可以避免在我也使用file1.js 的特定页面上出现jquery 重复?
    • 还有 12 个要走
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2023-03-10
    • 2013-01-10
    相关资源
    最近更新 更多