我在Grails項目中使用require.js。有幾個包含用define
定義的require.js模塊的單個JavaScript文件。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>
所有的模塊A,B等被require.js異步加載。現在我想將它們捆綁到一個文件中 - 我可以使用require.js優化工具,但我更願意使用assets-pipeline。這樣做的效果就像我將所有模塊捆綁到一個optimized-modules.js
中,其可在http://example.com/assets/optimized-modules.js
上獲得。
問題:我想要在動態呈現的GSP文件中獲得優化的JavaScript代碼。那麼,如何將optimize-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);
}
但我不能得到的內容這是由assets-pipeline插件在啓動時完成的縮小的optimize-modules.js。對此有何想法?
一個Grails 3.1版本的開心與@CompileStatic: ''' @CompileStatic 閉幕RenderFile模塊= {地圖ATTRS - > 字符串文件路徑= attrs.get( '文件') 如果{ throwTagError((文件路徑!)必須提供''file'屬性「) } Resource asset = assetResourceLocator.findAssetForURI((String)filePath) out << asset.inputStream } ''' –