Grails 2.4现在使用资产管道来管理和处理Grails应用程序中的静态资产,而不是资源系统。这是非常新的,但在互联网上还没有很多关于它的文档。
我的问题是,如何正确处理第三方库?
例如, select2 (http://ivaynberg.github.io/select2/)库在单个平面文件夹中附带所有.css,.js,图像文件。
我应该将不同的文件类型复制到相应的assets/javascripts/
,assets/stylesheets/
等子文件夹吗?如何处理那些没有像.json,text或doc文件这样明显位置的文件?
我应该创建一个vendors/select2/
文件夹吗?在assets/
或web-app/
中的位置?然后,我应该如何从我的GSP加载所有必要的文件?
此lib也只在表单视图中使用,因此除非需要,否则不应加载。
答案 0 :(得分:20)
Baxxabit的回答让我得到了解决方案。我一直在努力做同样的事情,但是想要充分利用管道,以便我可以使用less-asset-pipeline插件。
使用bootstrap作为示例,我创建了一个供应商文件夹作为标准资产文件夹的对等文件,然后删除了那里的引导文件。
的application.js:
//This is a javascript file with its top level require directives
//= require jquery
//= require bootstrap-3.1.1/javascript/bootstrap
//= require_tree views
//= require_self
...
和application.css:
/*
*= require_self
*= require main
*= require mobile
*= require bootstrap-3.1.1/stylesheets/bootstrap
*= encoding UTF-8
*/
要覆盖boostrap自定义,我只需将自定义的variables.less文件放入./grails-app/assets/vendor/bootstrap-3.1.1/stylesheets/variables.less即可。当涉及到覆盖文件时,资产下的第一个文件夹将被忽略,此后路径需要匹配您在供应商下面提供的任何内容。
这给了我这种层次结构:
grails-app/assets/
├── images
...
├── javascripts
│ └── application.js
├── stylesheets
│ ├── application.css
│ ├── bootstrap-3.1.1
│ │ └── stylesheets
│ │ └── variables.less
│ ├── errors.css
│ ├── main.css
│ └── mobile.css
└── vendor
└── bootstrap-3.1.1
├── javascript
│ ├── bootstrap.js
│ └── bootstrap.min.js
└── stylesheets
├── alerts.less
...
├── variables.less
└── wells.less
我喜欢这个结果。我已经清楚地描述了分布式软件包并且相对容易升级,并且我已将对该软件包的更改分离为可清晰识别的自定义文件。
我在https://github.com/ggascoigne/grails-pipeline-scss使用sass-asset-pipeline插件举了一个例子。
答案 1 :(得分:3)
您可以在标准文件夹(javascripts,样式,图片)附近创建另一个文件夹,如jsplugins
,然后您可以在必要的页面中包含js库,如果您不在所有页面上使用此库。
做这样的事情:
<assets:javascript src="select2/pathToYourJSFile"/>
注意:您可以省略assets
路径下的第一级路径,在此示例中它是jsplugins
。
最好的方法是使用 manifest.js 文件,您可以通过require
指令包含必要的文件。
您应该使用assests
文件夹而不是网络应用。在构建war文件期间,资产中的所有文件都将复制到web-app文件夹。
Bobby Warner的有用视频:http://www.youtube.com/watch?v=VHDBlGtAHB4
答案 2 :(得分:2)
资产管道对我来说似乎是一个倒退的步骤。我显然不能再使用cdnjs或类似的CDN来访问外部库。我是否真的将所有这些都用于为我自己的JS代码进行JS缩小?
答案 3 :(得分:0)
这适用于资产文件夹下的资产,但鉴于Web组件和javascript框架的激增,我们经常发现自己在Grails项目之外检查我们想要打包和分发我们的应用程序的外部项目。您还有一些案例,其中应用程序的前端由不是grails开发人员的前端开发人员处理,他们使用不同的工具以与grails REST断开连接的方式开发和测试前端服务。
因此,不是将外部项目的资产复制到grails应用程序中,而是如何引用外部文件夹,这将确保在开发期间运行应用程序时,以及何时运行应用程序时,这些资产将包含在您的应用程序中你WAR部署的应用程序?
答案 4 :(得分:-1)
要处理第三方库,您可以在资产文件夹中添加flipcountdown文件夹,
├── assets │ ├── flipcountdown │ │ ├── admin │ │ └── global │ ├── images │ │ ├── apple-touch-icon.png │ │ ├── apple-touch-icon-retina.png │ │ ├── favicon.ico │ │ ├── grails_logo.png │ │ ├── skin │ │ ├── spinner.gif │ │ └── springsource.png │ ├── javascripts │ │ ├── application.js │ │ └── jquery-2.1.3.js │ └── stylesheets │ ├── application.css │ ├── errors.css │ ├── main.css │ └── mobile.css
现在你可以使用普通语法
来引用css和js<assets:javascript src="admin/pathToYourJSFile"/>
<assets:stylesheet src="admin/pathToYourCSSFile"/>
<assets:stylesheet src="global/pathToYourCSSFile"/>