Я использую require.js в проекте Grails. Существует несколько отдельных файлов JavaScript, содержащих модули require.js, определенные с помощью define
.Grails: рендеринг файла из папки с данными в gsp
Существует также файл * .gsp, который генерирует конфигурацию require.js и точку входа, начиная с require()
, так как есть некоторые динамические конфигурации, которые должны быть сгенерированы. Это выглядит как-то так:
<%@ page contentType="application/javascript;charset=UTF-8" %>
require(['a', 'b'], function(a, b){
...
var a = ${controllerPropertyA};
...
some functions
...
});
В моем макете я интегрировать require.js так:
<script data-main='http://example.com/exampleController/dynamicGenerateMethod?domain=xyz.com' src='http://example.com/assets/require.js'></script>
Все модули а, б, и так далее асинхронно загружается require.js. Теперь я хотел бы объединить их в один файл - я мог бы использовать инструмент оптимизации require.js, но я предпочитаю использовать конвейер активов. Это работает настолько, что я получаю все модули, входящие в один optimized-modules.js
, который доступен по адресу http://example.com/assets/optimized-modules.js
.
Вопрос: Я хотел бы иметь оптимизированный код JavaScript в динамически отображаемом GSP-файле. Итак, как я могу вставить файл optimized-modules.js в GSP? Я динамически рендеринг? Я уже думал о теге, определенной в библиотеке тегов, так что мой * .gsp будет выглядеть
<%@ page contentType="application/javascript;charset=UTF-8" %>
<g:renderFile file="/assets/optimized-modules.js" />
require(['a', 'b'], function(a, b){
...
var a = ${controllerPropertyA};
...
some functions
...
});
и определения тегов как-то вроде этого:
def g:renderFile = { attrs, body ->
def filePath = attrs.file
if (!filePath) {
throwTagError("'file' attribute must be provided")
}
//out << filePath
out << request.servletContext.getResource(filePath).file
//out << grailsResourceLocator.findResourceForURI(filePath).file.text
//out << grailsApplication.mainContext.getResource(filePath).file.text
//out << Holders.getServletContext().getResource(filePath).getContent()
//IOUtils.copy(request.servletContext.getResourceAsStream(filePath), out);
}
Но я не могу получить содержимое из minified optimized-modules.js, который был выполнен плагином активов-конвейеров при запуске. Любые мысли по этому поводу?
Grails 3.1 счастливая версия с @CompileStatic: '' ' @CompileStatic Закрытие RenderFile = {Карта AttrS -> Строка Filepath = attrs.get ('файл') если { throwTagError ((Filepath!) атрибут '' file 'должен быть указан ") } Ресурс ресурс = assetResourceLocator.findAssetForURI ((String) filePath) out << asset.inputStream } ' '' –