@nsmp/groovy-webpack-plugin

3.1.0 • Public • Published

GroovyWebpackPlugin

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();"

Package Sidebar

Install

npm i @nsmp/groovy-webpack-plugin

Weekly Downloads

6

Version

3.1.0

License

MIT

Unpacked Size

3.43 MB

Total Files

22

Last publish

Collaborators

  • araimov
  • pzykov
  • kegorov
  • naumensmrm