0

从 Grails 2.5 迁移到 Grails 3 时,建议不要使用资源插件,因为不推荐使用后 Grails 3 资源插件。作为替代方案,我使用了资产管道。在迁移到资产管道插件时,是否有推荐的替换资源插件模块的方法?自定义标签用于 GSP 文件,这些文件假定包含 CSS 文件中的内容。目前我正在创建需要模块中资源的空 .js 或 .css 文件,然后替换引用空文件的 CSS 内容。如果有更好的方法来做到这一点?

<html>
<head>
<g:layoutHead/>
<r:layoutResources />
<r:external uri="/css/mycss.css" type="css" />
<g:customStylesheetIncludes/>
</head>
<body>
<g:layoutBody/>
<r:layoutResources />
</body>
</html>

这将由自定义 taglib 处理:

class MyResourcesTagLib {

    def customStylesheetIncludes = { attrs ->
        def controller = attrs.controller ?: controllerName
        def action = attrs.action ?: actionName

        writeCssIfExists( out, "css/my-custom.css" )

        // Determine the current page
        writeCssIfExists( out, "css/views/$controller/${action}-custom.css" )
    }

    private resourceExists( resPath ) {
        return grailsApplication.parentContext.getResource( resPath ).file.exists()
    }

    private writeCssIfExists( writer, css ) {
        if (resourceExists(css)) {
            def baseUri = grailsAttributes.getApplicationUri(request)

            baseUri += (baseUri.endsWith('/') ? '' : '/')

            writer << r.external(uri: baseUri, type: 'css')
        }
    }
}

我如何在 Grails 3 中使用资产管道处理相同的问题,任何建议或线索都非常感谢

4

1 回答 1

0

一种可能的解决方法是创建一个 Gradle 任务,将外部文件夹中的这些资产复制到适当的 grails-app/assets 文件夹

于 2020-04-15T04:59:35.817 回答