带有第三方库的Grails Asset-Pipeline系统

时间:2014-05-16 18:43:49

标签: grails asset-pipeline assets

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也只在表单视图中使用,因此除非需要,否则不应加载。

5 个答案:

答案 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

文档:http://bertramdev.github.io/asset-pipeline/

答案 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"/>