Система Grails Asset-Pipeline с сторонними библиотеками
Grails 2.4 теперь использует Asset Pipeline для управления и обработки статических ресурсов в приложениях Grails вместо системы Resources. Это довольно ново, и в Интернете пока мало информации о нем.
Мой вопрос в том, как правильно обрабатывать сторонние библиотеки?
Например, библиотека select2 (http://ivaynberg.github.io/select2/ поставляется со всеми ее .css,.js, файлы изображений в одной плоской папке.
Должен ли я копировать разные типы файлов в соответствующие подтексты assets/javascripts/
, assets/stylesheets/
и т.д.? Что делать с файлами, которые на самом деле не имеют очевидного местоположения, такого как файлы .json, text или doc?
Создать папку vendors/select2/
? Где, в assets/
или в web-app/
? И затем, как мне загрузить все необходимые файлы из моих GSP?
Эта библиотека также понадобится только в виде формы и поэтому не должна загружаться, если она не нужна.
Ответы
Ответ 1
Ответ на Baxxabit привел меня к моему решению. Я боролся с тем же, но хочу использовать большую часть конвейера, чтобы я мог использовать плагин с более низким капиталом.
В качестве примера, используя 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, я могу просто добавить настроенный файл variable.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
Мне нравится результат. У меня есть распределенный пакет, четко очерченный и относительно легко обновляемый, и у меня есть мои изменения в этом пакете, отделенные от четко идентифицируемого файла настройки.
Я привел пример, используя плагин sass-asset-конвейер в https://github.com/ggascoigne/grails-pipeline-scss.
Ответ 2
Вы можете создать другую папку типа jsplugins
рядом со стандартными папками (javascripts, styles, images), тогда вы можете включить js-библиотеку на нужные страницы, если вы не будете использовать эту библиотеку на всех страницах.
Сделайте что-то вроде этого:
<assets:javascript src="select2/pathToYourJSFile"/>
NB: вы можете пропустить путь первого уровня в пути assets
, в этом примере он jsplugins
.
Лучший способ - использовать файл manifest.js, где вы можете включить необходимые файлы с помощью директивы require
.
Вместо веб-приложения вы должны использовать папку assests
. Во время создания файла войны все файлы из активов будут скопированы в папку веб-приложения.
Полезное видео от Бобби Уорнера: http://www.youtube.com/watch?v=VHDBlGtAHB4
Документация: http://bertramdev.github.io/asset-pipeline/
Ответ 3
Ассемблер выглядит как шаг назад. По-видимому, я больше не могу использовать cdnjs или подобные CDN для доступа к внешним libs. Действительно ли я все это отдал, чтобы получить JS-оценку для моего собственного JS-кода?
Ответ 4
Это хорошо работает для активов в папке с ресурсами, но, учитывая распространение веб-компонентов и фреймворков javascript, мы часто проверяем внешние проекты, вне проекта Grails, которые мы хотим упаковать и распространять с помощью нашего приложения. У вас также есть случаи, когда передняя часть приложения обрабатывается сторонними разработчиками, которые не являются разработчиками Grails, и используют разные инструменты для разработки и тестирования интерфейса, отключенного от служб REST Grails.
Итак, вместо копирования активов внешнего проекта в ваше приложение grails, как вы делаете ссылку на внешние папки, это гарантирует, что эти активы будут включены в ваше приложение, когда вы запускаете приложение во время разработки, и когда вы WAR приложение для развертывания?
Ответ 5
Для обработки сторонних библиотек вы можете добавить папку 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"/>