Grails资产管道系统与第三方库



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中加载所有必要的文件?

这个库也只在表单视图中需要,因此除非需要,否则不应该加载。

Baxxabit的回答引导我找到了我的解决方案。我一直在努力做同样的事情,但想要充分利用管道,这样我就可以使用更少的资产管道插件。

以bootstrap为例,我创建了一个vendor文件夹,作为标准资产文件夹的对等部分,然后将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
*/

要覆盖引导自定义,我可以简单地删除一个自定义变量。Less文件放到。/grails-app/assets/vendor/bootstrap-3.1.1/stylesheets/variables.less中。当涉及到覆盖文件时,assets下的第一个文件夹将被忽略,此后该路径需要匹配您在vendor下放置的任何内容。

这给了我这样的层次结构:

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插件的例子。

你可以在标准文件夹(javascripts, styles, images)附近创建另一个文件夹jsplugins,然后你可以在必要的页面中包含js库,如果你不想在所有页面上使用这个库。

像这样写:

<assets:javascript src="select2/pathToYourJSFile"/>

注意:你可以省略assets路径下的第一级路径,在这个例子中是jsplugins

最好的方法是使用manifest.js文件,你可以通过require指令包含必要的文件。

你应该使用assests文件夹而不是web-app。在构建war文件的过程中,资产中的所有文件都会被复制到web-app文件夹中。

来自Bobby Warner的有用视频:http://www.youtube.com/watch?v=VHDBlGtAHB4

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

对我来说,资产管道似乎是一种倒退。我显然不能使用cdnjs或类似的cdn访问外部库了。我真的要放弃所有这些来获得我自己的JS代码的JS缩小吗?

对于assets文件夹下的资产来说,这很好,但是考虑到web组件和javascript框架的激增,我们经常发现自己要检查Grails项目之外的外部项目,我们想要打包和分发应用程序。还有一种情况是,应用程序的前端是由不是grails开发人员的前端开发人员处理的,他们使用不同的工具以一种与grails REST服务断开连接的方式开发和测试前端。

所以,与其将外部项目的资源复制到你的grails应用程序中,你如何引用外部文件夹,以确保无论你在开发过程中运行应用程序时,这些资源都将包含在你的应用程序中,当你WAR应用程序进行部署时?

要处理第三方库,您可以在assets文件夹中添加flipcountdown文件夹,

<>之前├──资产│├──flipcountdown││├──├││├──├─├│├──images││├──├─rammstein││├──├─rammstein││├──├──├││├──grails_logo.png││├──rammstein││├──rammstein .gif││├──springsource.png│├──javascript││├──├.js││├──jquery-2.1.3.js││样式表│├──├.css│├──errors.css│├──main.css│├──├──cat . cat之前

现在你可以使用正常语法引用css和js了,

<assets:javascript src="admin/pathToYourJSFile"/>
<assets:stylesheet src="admin/pathToYourCSSFile"/>
<assets:stylesheet src="global/pathToYourCSSFile"/>

最新更新