grails assets excludes
Sistema Grails Asset-Pipeline con libs de terceros (5)
Grails 2.4 ahora está utilizando Asset Pipeline para administrar y procesar activos estáticos en las aplicaciones de Grails en lugar del sistema de Recursos. Esto es bastante nuevo y todavía no hay muchos documentos al respecto en internet.
Mi pregunta es, ¿cómo manejar correctamente las bibliotecas de terceros?
Por ejemplo, la biblioteca select2 ( http://ivaynberg.github.io/select2/ ) viene con todos sus archivos de imagen .css, .js, en una sola carpeta plana.
¿Debo copiar los diferentes tipos de archivos en sus correspondientes subcarpetas de assets/javascripts/
, assets/stylesheets/
, etc.? ¿Qué hacer con los archivos que en realidad no tienen una ubicación obvia como los archivos .json, text o doc?
¿Debo crear una carpeta vendors/select2/
? ¿Dónde, en los assets/
o en web-app/
? Y luego, ¿cómo debo cargar todos los archivos necesarios de mis GSP?
Esta biblioteca también será necesaria solo en una vista de formulario y, por lo tanto, no debe cargarse a menos que sea necesaria.
El activo-pipeline me parece un paso atrás. Aparentemente ya no puedo usar CDNs o CDN similares para acceder a bibliotecas externas. ¿Realmente estoy dando todo esto para obtener la minificación de JS para mi propio código JS?
Eso funciona bien para los activos en la carpeta de activos, pero dada la proliferación de componentes web y frameworks javascript, a menudo nos encontramos revisando proyectos externos, fuera de un proyecto de Grails, que deseamos empaquetar y distribuir con nuestra aplicación. También tiene casos en los que los desarrolladores de front-end que no son grails trabajan en el front-end de una aplicación, y usan diferentes herramientas para desarrollar y probar el front-end de una manera que está desconectada de los servicios REST de grails.
Entonces, en lugar de copiar los activos de un proyecto externo en su aplicación de grails, ¿cómo hace una referencia a carpetas externas, eso asegurará que esos activos se incluirán en su aplicación cada vez que ejecute la aplicación durante el desarrollo, y cuando GUIARÁ el aplicación para la implementación?
La respuesta de Baxxabit me llevó a mi solución. He estado luchando con la misma cosa, pero con ganas de aprovechar al máximo la canalización para poder usar el plugin pipeline de menos activos.
Usando bootstrap como ejemplo, creé una carpeta de proveedor como un par de las carpetas de activos estándar y luego coloqué los archivos de bootstrap debajo.
aplicacion.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
...
y application.css:
/*
*= require_self
*= require main
*= require mobile
*= require bootstrap-3.1.1/stylesheets/bootstrap
*= encoding UTF-8
*/
Para anular la personalización de boostrap, simplemente puedo colocar un archivo de variables.less personalizado en ./grails-app/assets/vendor/bootstrap-3.1.1/stylesheets/variables.less. La primera carpeta bajo activos se ignora cuando se trata de anular archivos, luego la ruta debe coincidir con lo que usted ponga bajo el proveedor.
Esto me da este tipo de jerarquía:
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
Me gusta el resultado. Tengo el paquete distribuido claramente delineado y relativamente fácil de actualizar, y tengo mis cambios en ese paquete separados en un archivo de personalización claramente identificable.
He puesto un ejemplo usando el complemento sass-asset-pipeline en https://github.com/ggascoigne/grails-pipeline-scss .
Para manejar bibliotecas de terceros, puede agregar la carpeta flipcountdown dentro de la carpeta de activos,
├── 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
Ahora puede hacer referencia a css y js usando la sintaxis normal,
<assets:javascript src="admin/pathToYourJSFile"/>
<assets:stylesheet src="admin/pathToYourCSSFile"/>
<assets:stylesheet src="global/pathToYourCSSFile"/>
Puede crear otra carpeta como jsplugins
cerca de las carpetas estándar (javascripts, estilos, imágenes), luego puede incluir la biblioteca js en las páginas necesarias, si no usara esta biblioteca en todas las páginas.
Haz algo como esto:
<assets:javascript src="select2/pathToYourJSFile"/>
NB: puede omitir la ruta de primer nivel en la ruta de assets
, en este ejemplo es jsplugins
.
La mejor manera es usar el archivo manifest.js , donde puede incluir los archivos necesarios a través de la directiva require
.
Deberías usar la carpeta de assests
lugar de la aplicación web. Durante la creación del archivo war, todos los archivos de los activos se copiarán en la carpeta de la aplicación web.
Video útil de Bobby Warner: http://www.youtube.com/watch?v=VHDBlGtAHB4
Documentación: http://bertramdev.github.io/asset-pipeline/