【问题标题】:Grails Asset Pipeline plugin: using third-party CDNsGrails Asset Pipeline 插件:使用第三方 CDN
【发布时间】:2023-04-05 22:45:03
【问题描述】:

如何通过Grails Asset Pipeline plugin 轻松使用第三方 CDN?

Asset Pipeline 可以将所有资产请求重定向到单个基本 URL;这适用于从不是我的 Grails 服务器的服务器提供我的静态文件,但它要求我的所有静态文件都在该服务器上。

但是,我的专有 JS 和 CSS 永远不会出现在公共 CDN 上。此外,我使用的一些标准库可能由不同的 CDN 托管,因此我需要能够引用多个不同的 CDN。

我需要为每个资产(或资产模式)指定一个映射。

此外,公共 CDN 上资产的 URL 必须包含资产的版本。

我不想在对资产的每个引用中都包含版本号,因此我需要能够从资产名称映射到完整的 URL,而不是受限于附加到资产的基本 URL 映射名字。

我正在使用 Grails 2.5.0;如果 Grails 3.x 的答案不同,我们将不胜感激有关这两个版本的信息。

【问题讨论】:

    标签: grails asset-pipeline assets cdn


    【解决方案1】:

    资产管道实际上允许基本 url 映射是一个闭包。此闭包采用请求对象的单个输入参数。您实际上可以使用它来根据请求操作基本资产 url。文档在配置部分中有更多关于此的信息

    【讨论】:

    • 那个闭包有一个 Request 参数,所以它必须在运行时在 Grails 中运行,对吗?我想要的所有映射都可以在构建时按逻辑完成;我的使用不需要运行时调度,而且我不想要开销。通过运行时调度,我无法从我的静态文件链接到 Asset Pipelined 资产:例如,文件 A 通过 Asset Pipeline 引用资产 B、C 和 D。 B 在 CDN 上,C 在我的静态服务器上,D 在我的 Grails 服务器上。如果 Asset Pipeline 在构建时没有为这些引用注入实际 URL,那么我无法生成静态 A 并从我的静态服务器提供它。
    • 另外,看起来闭包返回一个基本 URL,并且不能向资产名称添加版本,或以任何方式修改 URL,除非通过预先添加基本 URL。
    • 如果 Asset Pipeline 在构建时不支持映射,他们可以添加一个新的配置属性,可能名为“grails.assets.build.mapping”,它接受带有一个或两个字符串参数。在构建时,Asset Pipeline 将在尝试为资产生成 URL 时调用闭包,资产名称作为第一个参数,grails.assets.url 的值作为第二个参数。返回的字符串是资产的完整 URL。返回 null 可能是一种特殊情况,或者可能导致构建时 NPE。
    • 您在这里指的文件 A 到底是什么?我们是在谈论 css、javascript 吗?在构建时这样做的缺点是您可能会失去战争文件的可移植性。它现在完全取决于您在 CDN 上指向的任何映射。使用缓存映射可以保持生产运行时映射开销非常有效。我想我必须看到一个示例用例随意发布在 github 上,我会看看
    • 我还不知道 Asset Pipeline 是否支持注入 HTML 文件;如果是这样,CDN 和其他链接可以在构建时注入 HTML 文件,这些文件可以部署在静态服务器上。因此,如果 Asset Pipeline 支持它,A 可能是一个 HTML 文件。如果它不支持注入 HTML 文件,我仍然可以想象将 GSP 仅用于资产注入(没有其他逻辑),Asset Pipeline 在构建时将 GSP 转换为 HTML,并从静态服务器提供这些服务
    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多