Taglib не обрабатывает CSS, ссылаясь на внешнюю папку

При переходе с 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, любые предложения или рекомендации высоко ценятся


person Soven K Rout    schedule 03.04.2020    source источник
comment
Конвейер ресурсов отлично работает для ресурсов в папке assets, но, учитывая распространение веб-компонентов и фреймворков javascript, мы часто проверяем внешние проекты, не входящие в проект Grails, которые мы хотим упаковать и распространять вместе с нашим приложением. Таким образом, вместо того, чтобы копировать ресурсы внешнего проекта в ваше приложение Grails, как вы делаете ссылку на внешние папки, что гарантирует, что эти ресурсы будут включены в ваше приложение всякий раз, когда вы запускаете приложение во время разработки, и когда вы WAR приложение для развертывания? Это может быть один подход.   -  person Soven K Rout    schedule 03.04.2020


Ответы (1)


Возможный обходной путь — создать задачу Gradle, которая копирует эти ресурсы из внешней папки в соответствующие папки grails-app/assets.

person Sergio del Amo    schedule 15.04.2020