GroovyWebpackPlugin - это плагин для webpack
, который предназначен для сборки скриптовых модулей с расширением .groovy
в один xml
файл.
Плагин представляет собой класс GroovyWebpackPlugin, который в качестве единственного аргумента конструктора принимает объект настроек options
:
/**
* Итоговый xml файл будет создан в директории результирующей сборки, в соответствии с вашей конфигурацией webpack.
*
* Рекомендуется назвать итоговый файл:
* - 'privateModules.xml', если в нём будут собраны модули, необходимые для работы с данными;
* - 'openModules.xml', если в нём будут собраны модули, необходимые для настройки ВП.
* Флаг editBySuperusers рекомендуется:
* - установить в false, для модулей работы с данными;
* - установить в true, для модулей работы с настройками.
* Флаг viewBySuperusers рекомендуется:
* - установить в true, для модулей любого вида, за исключением ситуаций, когда их нужно скрыть.
* Флаг restAllowed рекомендуется:
* - установить в false, для модулей работы с данными (если обращения идут через модуль настроек);
* - установить в true, для модулей работы с настройками.
* Массив replacers позволяет заменить какие-либо вхождения в модулях. Например, это может быть полезно для
* уточнения пространства имен, при выпуске версии. В таком случае настройка может выглядеть так:
* - replacers: [{search: 'package ru.modules.ea', replacer: 'package ru.modules.ea_v_1_0_0'}]
* - replacers: [{search: new RegExp('^.* ru\.*\.ea$', 'gm'), replacer: 'package ru.modules.ea_v_1_0_0',}]
* Если в качестве search передан string, то будет изменено первое найденное вхождение в каждом модуле.
* @param {Object} options - объект настройки
* @param {boolean} [options.editBySuperusers=false] - доступность скриптовых модулей для редактирования суперпользователем
* @param {string} options.output - путь до файла и его имя с расширением xml, напр.: 'privateModules.xml'
* @param {string[]} options.paths - массив строк, представляющих пути до директорий с модулями или пути до модулей
* @param {Array<{search: string|RegExp, replacer: string}>} [options.replacers=[]] - массив объектов для замены строк
* @param {boolean} [options.viewBySuperusers=true] - доступность скриптовых модулей для просмотра суперпользователем
* @param {boolean} [options.restAllowed=true] - доступность скриптовых модулей для вызова через REST
*/
constructor (options) {
/* ... */
}
npm i @nsmp/groovy-webpack-plugin --save-dev
Пример структуры проекта
app
./app/
_ _ ./dist/
_ _ ./rest/
_ _ _ _ ./modules/
_ _ _ _ _ _ ./eaEmail.groovy
_ _ _ _ _ _ ./eaUtils.groovy
_ _ _ _ _ _ ./eaSettings.groovy
_ _ _ _ _ _ ./eaData/
_ _ _ _ _ _ _ _ ./data1.groovy
_ _ _ _ _ _ _ _ ./data2.groovy
_ _ ./webpack
_ _ _ _ ./webpack.config.js
Пример содержимого файла ./webpack.config.js
, в котором пути указаны относительно корня проекта (директории содержащей файл .package.json
)
const GroovyWebpackPlugin = require('groovy-webpack-plugin');
module.exports = {
/* ... webpack config */
plugins: [
new GroovyWebpackPlugin({
output: 'privateModules.xml',
paths: [
'./rest/modules/eaData/',
'./rest/modules/eaEmail.groovy',
'./rest/modules/eaUtils.groovy',
],
editBySuperusers: false
}),
new GroovyWebpackPlugin({
output: 'openModules.xml',
paths: ['./rest/modules/eaSettings.groovy'],
editBySuperusers: true
})
],
/* ... */
}
Пример содержимого файла ./webpack.config.js
, в котором пути указаны относительно директории, где вызван GroovyWebpackPlugin
const GroovyWebpackPlugin = require('groovy-webpack-plugin');
const path = require('path');
module.exports = {
/* ... webpack config */
plugins: [
new GroovyWebpackPlugin({
editBySuperusers: false,
output: 'privateModules.xml',
paths: [
path.resolve(__dirname, '../rest/modules/eaData/'),
path.resolve(__dirname, '../rest/modules/eaEmail.groovy'),
path.resolve(__dirname, '../rest/modules/eaUtils.groovy'),
],
replacers: [{search: 'package ru.modules.ea', replacer: 'package ru.modules.ea_v_1_0_0'}]
}),
new GroovyWebpackPlugin({
editBySuperusers: true,
output: 'openModules.xml',
paths: [path.resolve(__dirname, '../rest/modules/eaSettings.groovy')],
replacers: [{search: new RegExp('^.* ru\.*\.ea$', 'gm'), replacer: 'package ru.modules.ea_v_1_0_0'}]
})
],
/* ... */
}
Пример использования GWP в качестве задачи или shell-скрипта, вне контекста Webpack, относительно корня проекта app
(если плагин установлен в качестве зависимости)
node -e "
const GroovyWebpackPlugin = require('groovy-webpack-plugin');
new GroovyWebpackPlugin({
editBySuperusers: true,
output: 'privateModules.xml',
paths: [
'./test/rest/modules/eaData/',
'./test/rest/modules/eaEmail.groovy',
'./test/rest/modules/eaUtils.groovy'
]
}).generateFileContent();"