Подтвердить что ты не робот

Система 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?

Эта библиотека также понадобится только в виде формы и поэтому не должна загружаться, если она не нужна.

4b9b3361

Ответ 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"/>