mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-21 23:43:17 +01:00
change rollup.config.js to scan for all installed apps, and run rollup as part of install-cli.php automatic
This commit is contained in:
parent
1423a4c6e0
commit
96dff06453
276
Gruntfile.js
276
Gruntfile.js
@ -4,7 +4,7 @@
|
||||
* @link http://www.egroupware.org
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @author Ralf Becker <rb@egroupware.org>
|
||||
* @copyright (c) 2016 by Ralf Becker <rb@egroupware.org>
|
||||
* @copyright (c) 2016-21 by Ralf Becker <rb@egroupware.org>
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -16,290 +16,21 @@
|
||||
* To generate the now existing package.json:
|
||||
* npm init
|
||||
* npm install grunt --save-dev
|
||||
* npm install grunt-terser --save-dev
|
||||
* npm install grunt-newer --save-dev
|
||||
* npm install grunt-contrib-cssmin --save-dev
|
||||
*
|
||||
* Building happens by running in your EGroupware directory:
|
||||
*
|
||||
* grunt # runs uglify and cssmin for all targets with changed files
|
||||
* or
|
||||
* grunt [newer:]terser:<target> # targets: api, et2, pixelegg, mobile, mail, calendar, ...
|
||||
* grunt # runs cssmin for all targets with changed files
|
||||
* or
|
||||
* grunt [newer:]cssmin:<target> # targets: pixelegg, jdots
|
||||
*
|
||||
* app.js files can be added like mail target or, if you want automatic dependencies,
|
||||
* you need to add them in egw_framework::$bundle2minurl and egw_framework::get_bundles().
|
||||
*
|
||||
* To update files in Gruntfile after adding new js files you need to run:
|
||||
*
|
||||
* updateGruntfile.php
|
||||
*
|
||||
* Please use only double quotes, as we parse this file as json to update it!
|
||||
*
|
||||
* @param {object} grunt
|
||||
*/
|
||||
module.exports = function (grunt) {
|
||||
grunt.initConfig({
|
||||
terser: {
|
||||
options: {
|
||||
mangle: false,
|
||||
sourceMap: true,
|
||||
output: {
|
||||
preamble: "/*!\n * EGroupware (http://www.egroupware.org/) minified Javascript\n *\n * full sources are available under https://github.com/EGroupware/egroupware/\n *\n * build <%= grunt.template.today() %>\n */\n"
|
||||
}
|
||||
},
|
||||
api: {
|
||||
files: {
|
||||
"api/js/jsapi.min.js": [
|
||||
"vendor/bower-asset/jquery/dist/jquery.js",
|
||||
"api/js/jquery/jquery.noconflict.js",
|
||||
"vendor/bower-asset/jquery-ui/jquery-ui.js",
|
||||
"api/js/jsapi/jsapi.js",
|
||||
"api/js/egw_json.js",
|
||||
"api/js/jsapi/egw_core.js",
|
||||
"api/js/jsapi/egw_debug.js",
|
||||
"api/js/jsapi/egw_preferences.js",
|
||||
"api/js/jsapi/egw_utils.js",
|
||||
"api/js/jsapi/egw_ready.js",
|
||||
"api/js/jsapi/egw_files.js",
|
||||
"api/js/jsapi/egw_lang.js",
|
||||
"api/js/jsapi/egw_links.js",
|
||||
"api/js/jsapi/egw_open.js",
|
||||
"api/js/jsapi/egw_user.js",
|
||||
"api/js/jsapi/egw_config.js",
|
||||
"api/js/jsapi/egw_images.js",
|
||||
"api/js/jsapi/egw_jsonq.js",
|
||||
"api/js/jsapi/egw_json.js",
|
||||
"api/js/jsapi/egw_store.js",
|
||||
"api/js/jsapi/egw_tooltip.js",
|
||||
"api/js/jsapi/egw_css.js",
|
||||
"api/js/jquery/jquery-ui-timepicker-addon.js",
|
||||
"api/js/jsapi/egw_calendar.js",
|
||||
"api/js/jsapi/egw_data.js",
|
||||
"api/js/jsapi/egw_tail.js",
|
||||
"api/js/jsapi/egw_inheritance.js",
|
||||
"api/js/jsapi/egw_message.js",
|
||||
"api/js/jsapi/egw_notification.js",
|
||||
"api/js/es6-promise.min.js",
|
||||
"api/js/jsapi/app_base.js",
|
||||
"api/js/jsapi/egw_app.js",
|
||||
"api/js/dhtmlxtree/codebase/dhtmlxcommon.js",
|
||||
"api/js/dhtmlxtree/sources/dhtmlxtree.js",
|
||||
"api/js/dhtmlxtree/sources/ext/dhtmlxtree_json.js",
|
||||
"api/js/egw_action/egw_action_common.js",
|
||||
"api/js/egw_action/egw_action.js",
|
||||
"api/js/egw_action/egw_keymanager.js",
|
||||
"api/js/egw_action/egw_menu.js",
|
||||
"api/js/jquery/jquery-tap-and-hold/jquery.tapandhold.js",
|
||||
"api/js/egw_action/egw_action_popup.js",
|
||||
"api/js/egw_action/egw_action_dragdrop.js",
|
||||
"api/js/egw_action/egw_dragdrop_dhtmlx_tree.js",
|
||||
"api/js/dhtmlxMenu/sources/dhtmlxmenu.js",
|
||||
"api/js/dhtmlxMenu/sources/ext/dhtmlxmenu_ext.js",
|
||||
"api/js/egw_action/egw_menu_dhtmlx.js",
|
||||
"api/js/jquery/chosen/chosen.jquery.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
et2: {
|
||||
files: {
|
||||
"api/js/etemplate/etemplate2.min.js": [
|
||||
"api/js/etemplate/et2_core_xml.js",
|
||||
"api/js/etemplate/et2_core_interfaces.js",
|
||||
"api/js/etemplate/et2_core_common.js",
|
||||
"api/js/etemplate/et2_core_inheritance.js",
|
||||
"api/js/etemplate/et2_core_phpExpressionCompiler.js",
|
||||
"api/js/etemplate/et2_core_arrayMgr.js",
|
||||
"api/js/etemplate/et2_core_widget.js",
|
||||
"api/js/etemplate/et2_core_DOMWidget.js",
|
||||
"api/js/etemplate/et2_widget_template.js",
|
||||
"api/js/etemplate/et2_widget_grid.js",
|
||||
"api/js/etemplate/et2_core_baseWidget.js",
|
||||
"api/js/etemplate/et2_widget_box.js",
|
||||
"api/js/etemplate/et2_widget_hbox.js",
|
||||
"api/js/etemplate/et2_widget_groupbox.js",
|
||||
"api/js/jquery/splitter.js",
|
||||
"api/js/etemplate/et2_widget_split.js",
|
||||
"api/js/etemplate/et2_widget_button.js",
|
||||
"api/js/etemplate/et2_core_valueWidget.js",
|
||||
"api/js/etemplate/et2_core_inputWidget.js",
|
||||
"api/js/etemplate/et2_widget_color.js",
|
||||
"api/js/jquery/blueimp/js/blueimp-gallery.min.js",
|
||||
"api/js/etemplate/expose.js",
|
||||
"api/js/etemplate/et2_widget_description.js",
|
||||
"api/js/etemplate/et2_widget_entry.js",
|
||||
"api/js/etemplate/et2_widget_textbox.js",
|
||||
"api/js/etemplate/et2_widget_number.js",
|
||||
"api/js/etemplate/et2_widget_password.js",
|
||||
"api/js/jquery/jquery.base64.js",
|
||||
"api/js/etemplate/et2_widget_url.js",
|
||||
"api/js/etemplate/et2_widget_selectbox.js",
|
||||
"api/js/etemplate/et2_widget_checkbox.js",
|
||||
"api/js/etemplate/et2_widget_radiobox.js",
|
||||
"api/js/etemplate/lib/date.js",
|
||||
"api/js/etemplate/et2_widget_date.js",
|
||||
"api/js/etemplate/et2_widget_dialog.js",
|
||||
"vendor/bower-asset/diff2html/dist/diff2html.min.js",
|
||||
"api/js/etemplate/et2_widget_diff.js",
|
||||
"api/js/etemplate/et2_widget_dropdown_button.js",
|
||||
"api/js/etemplate/et2_widget_styles.js",
|
||||
"api/js/etemplate/et2_widget_link.js",
|
||||
"api/js/etemplate/et2_widget_selectAccount.js",
|
||||
"vendor/egroupware/magicsuggest/magicsuggest.js",
|
||||
"api/js/etemplate/et2_widget_taglist.js",
|
||||
"api/js/etemplate/et2_extension_customfields.js",
|
||||
"api/js/etemplate/et2_dataview_view_rowProvider.js",
|
||||
"api/js/etemplate/et2_extension_nextmatch_rowProvider.js",
|
||||
"api/js/etemplate/et2_dataview_view_container.js",
|
||||
"api/js/etemplate/et2_dataview_view_row.js",
|
||||
"api/js/etemplate/et2_dataview_interfaces.js",
|
||||
"vendor/bower-asset/jquery-touchswipe/jquery.touchSwipe.js",
|
||||
"api/js/etemplate/et2_dataview_view_aoi.js",
|
||||
"api/js/etemplate/et2_dataview_controller_selection.js",
|
||||
"api/js/etemplate/et2_dataview_view_tile.js",
|
||||
"api/js/etemplate/et2_dataview_controller.js",
|
||||
"api/js/etemplate/et2_extension_nextmatch_actions.js",
|
||||
"api/js/etemplate/et2_extension_nextmatch_controller.js",
|
||||
"api/js/etemplate/et2_widget_dynheight.js",
|
||||
"api/js/etemplate/et2_dataview_model_columns.js",
|
||||
"api/js/etemplate/et2_dataview_view_spacer.js",
|
||||
"api/js/etemplate/et2_dataview_view_grid.js",
|
||||
"api/js/etemplate/et2_dataview_view_resizeable.js",
|
||||
"api/js/etemplate/et2_dataview.js",
|
||||
"api/js/etemplate/et2_extension_nextmatch.js",
|
||||
"api/js/etemplate/et2_widget_favorites.js",
|
||||
"api/js/etemplate/et2_widget_html.js",
|
||||
"api/js/etemplate/et2_core_editableWidget.js",
|
||||
"api/js/etemplate/et2_widget_htmlarea.js",
|
||||
"api/js/etemplate/et2_widget_tabs.js",
|
||||
"api/js/etemplate/et2_widget_timestamper.js",
|
||||
"api/js/etemplate/et2_widget_toolbar.js",
|
||||
"api/js/etemplate/et2_widget_tree.js",
|
||||
"api/js/etemplate/et2_widget_historylog.js",
|
||||
"api/js/etemplate/et2_widget_hrule.js",
|
||||
"vendor/bower-asset/cropper/dist/cropper.min.js",
|
||||
"api/js/etemplate/et2_widget_image.js",
|
||||
"api/js/etemplate/et2_widget_iframe.js",
|
||||
"api/js/Resumable/resumable.js",
|
||||
"api/js/etemplate/et2_widget_file.js",
|
||||
"api/js/etemplate/et2_widget_progress.js",
|
||||
"api/js/etemplate/et2_widget_portlet.js",
|
||||
"api/js/etemplate/et2_widget_ajaxSelect.js",
|
||||
"api/js/etemplate/vfsSelectUI.js",
|
||||
"api/js/etemplate/et2_widget_vfs.js",
|
||||
"api/js/etemplate/et2_widget_video.js",
|
||||
"api/js/etemplate/et2_widget_audio.js",
|
||||
"api/js/jquery/barcode/jquery-barcode.min.js",
|
||||
"api/js/etemplate/et2_widget_barcode.js",
|
||||
"api/js/etemplate/et2_extension_itempicker_actions.js",
|
||||
"api/js/etemplate/et2_widget_itempicker.js",
|
||||
"api/js/etemplate/et2_widget_script.js",
|
||||
"api/js/etemplate/et2_widget_countdown.js",
|
||||
"api/js/etemplate/et2_core_legacyJSFunctions.js",
|
||||
"api/js/etemplate/etemplate2.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
mail: {
|
||||
files: {
|
||||
"mail/js/app.min.js": [
|
||||
"mail/js/app.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
calendar: {
|
||||
files: {
|
||||
"calendar/js/app.min.js": [
|
||||
"calendar/js/View.js",
|
||||
"calendar/js/et2_widget_owner.js",
|
||||
"calendar/js/et2_widget_view.js",
|
||||
"calendar/js/et2_widget_timegrid.js",
|
||||
"calendar/js/et2_widget_event.js",
|
||||
"calendar/js/et2_widget_daycol.js",
|
||||
"calendar/js/et2_widget_planner_row.js",
|
||||
"calendar/js/et2_widget_planner.js",
|
||||
"calendar/js/app.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
jdots: {
|
||||
files: {
|
||||
"jdots/js/fw_jdots.min.js": [
|
||||
"api/js/framework/fw_base.js",
|
||||
"api/js/framework/fw_browser.js",
|
||||
"api/js/jquery/mousewheel/mousewheel.js",
|
||||
"api/js/framework/fw_ui.js",
|
||||
"api/js/framework/fw_classes.js",
|
||||
"api/js/framework/fw_desktop.js",
|
||||
"jdots/js/fw_jdots.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
mobile: {
|
||||
files: {
|
||||
"pixelegg/js/fw_mobile.min.js": [
|
||||
"vendor/bower-asset/fastclick/lib/fastclick.js",
|
||||
"api/js/framework/fw_base.js",
|
||||
"api/js/framework/fw_browser.js",
|
||||
"api/js/jquery/mousewheel/mousewheel.js",
|
||||
"api/js/framework/fw_ui.js",
|
||||
"api/js/framework/fw_classes.js",
|
||||
"pixelegg/js/fw_mobile.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
notifications: {
|
||||
files: {
|
||||
"notifications/js/notificationajaxpopup.min.js": [
|
||||
"notifications/js/notificationajaxpopup.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
pixelegg: {
|
||||
files: {
|
||||
"pixelegg/js/fw_pixelegg.min.js": [
|
||||
"api/js/framework/fw_base.js",
|
||||
"api/js/framework/fw_browser.js",
|
||||
"api/js/jquery/mousewheel/mousewheel.js",
|
||||
"api/js/framework/fw_ui.js",
|
||||
"api/js/framework/fw_classes.js",
|
||||
"api/js/framework/fw_desktop.js",
|
||||
"pixelegg/js/slider.js",
|
||||
"pixelegg/js/fw_pixelegg.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
projectmanager: {
|
||||
files: {
|
||||
"projectmanager/js/app.min.js": [
|
||||
"vendor/npm-asset/dhtmlx-gantt/codebase/dhtmlxgantt.js",
|
||||
"vendor/npm-asset/dhtmlx-gantt/codebase/ext/dhtmlxgantt_marker.js",
|
||||
"projectmanager/js/et2_widget_gantt.js",
|
||||
"projectmanager/js/app.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
smallpart: {
|
||||
files: {
|
||||
"smallpart/js/app.min.js": [
|
||||
"smallpart/js/et2_widget_videobar.js",
|
||||
"smallpart/js/et2_videooverlay_interface.js",
|
||||
"smallpart/js/overlay_plugins/et2_smallpart_overlay_html.js",
|
||||
"smallpart/js/overlay_plugins/et2_smallpart_question_multiplechoice.js",
|
||||
"smallpart/js/overlay_plugins/et2_smallpart_question_singlechoice.js",
|
||||
"smallpart/js/overlay_plugins/et2_smallpart_question_text.js",
|
||||
"smallpart/js/et2_widget_videooverlay.js",
|
||||
"smallpart/js/et2_widget_videooverlay_slider_controller.js",
|
||||
"smallpart/js/et2_widget_videotime.js",
|
||||
"smallpart/js/et2_widget_comment.js",
|
||||
"smallpart/js/et2_widget_color_radiobox.js",
|
||||
"smallpart/js/et2_widget_filter_participants.js",
|
||||
"smallpart/js/app.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
cssmin: {
|
||||
options: {
|
||||
shorthandCompacting: false,
|
||||
@ -474,9 +205,6 @@ module.exports = function (grunt) {
|
||||
}
|
||||
}
|
||||
});
|
||||
// Load the plugin that provides the "uglify" task.
|
||||
grunt.loadNpmTasks("grunt-terser");
|
||||
|
||||
// Load plugin for css minificaton
|
||||
grunt.loadNpmTasks("grunt-contrib-cssmin");
|
||||
|
||||
|
@ -275,12 +275,14 @@ foreach(scandir(__DIR__) as $dir)
|
||||
$cmd = $composer.' install '.implode(' ', $composer_args);
|
||||
run_cmd($cmd, 'composer');
|
||||
|
||||
// update npm dependencies and run grunt to minify javascript and css
|
||||
// update npm dependencies, run grunt to minify css and rollup to build javascript
|
||||
if ($npm && $grunt)
|
||||
{
|
||||
run_cmd($npm.' install', 'npm');
|
||||
run_cmd($npm.' install', 'npm install');
|
||||
|
||||
run_cmd($grunt, 'grunt');
|
||||
|
||||
run_cmd($npm .' run build', 'rollup (npm run build)');
|
||||
}
|
||||
|
||||
echo "\n$succieded tasks successful run".
|
||||
|
@ -14,6 +14,7 @@ import babel from '@babel/core';
|
||||
import { readFileSync } from "fs";
|
||||
import rimraf from 'rimraf';
|
||||
import { minify } from 'terser';
|
||||
import { readdir,stat } from 'fs/promises';
|
||||
|
||||
// Best practice: use this
|
||||
//rimraf.sync('./dist/');
|
||||
@ -22,7 +23,7 @@ rimraf.sync('./chunks/');
|
||||
// Turn on minification
|
||||
const do_minify = false;
|
||||
|
||||
export default {
|
||||
const config = {
|
||||
treeshake: false,
|
||||
input: {
|
||||
// Output : Input
|
||||
@ -32,35 +33,8 @@ export default {
|
||||
"api/js/etemplate/etemplate2.min":"api/js/etemplate/etemplate2.ts",
|
||||
"api/js/egw_action/egw_dragdrop_dhtmlx_tree.min":"api/js/egw_action/egw_dragdrop_dhtmlx_tree.js",
|
||||
"api/js/jsapi/egw.min": "api/js/jsapi/egw_modules.js",
|
||||
"api/js/jsapi.min": 'api/js/jsapi/jsapi.js',
|
||||
|
||||
// Should be just built-in apps, but until rollup supports multi-level we need them all
|
||||
"addressbook/js/app": "addressbook/js/app.ts",
|
||||
"admin/js/app": "admin/js/app.ts",
|
||||
"bookmarks/js/app": "bookmarks/js/app.ts",
|
||||
"calendar/js/app" : "calendar/js/app.ts",
|
||||
"collabora/js/app": "collabora/js/app.ts",
|
||||
"filemanager/js/app": "filemanager/js/app.ts",
|
||||
//"home/js/app": "home/js/app.js",
|
||||
"importexport/js/app": "importexport/js/app.ts",
|
||||
"infolog/js/app": "infolog/js/app.ts",
|
||||
"mail/js/app.min": "mail/js/app.js",
|
||||
"news_admin/js/app": "news_admin/js/app.ts",
|
||||
"notifications/js/notificationajaxpopup.min": "notifications/js/notificationajaxpopup.js",
|
||||
"preferences/js/app": "preferences/js/app.ts",
|
||||
"projectmanager/js/app": "projectmanager/js/app.ts",
|
||||
"resources/js/app": "resources/js/app.ts",
|
||||
"rocketchat/js/app.min": "rocketchat/js/app.js",
|
||||
"smallpart/js/app": "smallpart/js/app.ts",
|
||||
"status/js/app": "status/js/app.ts",
|
||||
"timesheet/js/app": "timesheet/js/app.ts",
|
||||
"tracker/js/app": "tracker/js/app.ts",
|
||||
// EPL
|
||||
"esyncpro/js/app": "esyncpro/js/app.ts",
|
||||
"kanban/js/app": "kanban/js/app.ts",
|
||||
"policy/js/app": "policy/js/app.ts",
|
||||
"stylite/js/app": "stylite/js/app.ts",
|
||||
"webauthn/js/app": "webauthn/js/app.ts",
|
||||
// app.ts/js are added automatic by addAppsConfig() below
|
||||
},
|
||||
external: function(id,parentId,isResolved) {
|
||||
if(!isResolved)
|
||||
@ -140,7 +114,7 @@ export default {
|
||||
mangle: false,
|
||||
output: {
|
||||
preamble: `/*!
|
||||
* EGroupware (http://www.egroupware.org/) minified Javascript
|
||||
* EGroupware (https://www.egroupware.org/) minified Javascript
|
||||
*
|
||||
* full sources are available under https://github.com/EGroupware/egroupware/
|
||||
*
|
||||
@ -151,11 +125,39 @@ export default {
|
||||
});
|
||||
}
|
||||
}],
|
||||
|
||||
// Custom warning handler to give more information about circular dependencies
|
||||
|
||||
onwarn: function(warning,warn) {
|
||||
console.warn(warning);
|
||||
console.warn(warning.message || warning);
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Add existing app.ts/js endpoints to config.input and return it
|
||||
*
|
||||
* @return Promise<object>
|
||||
*/
|
||||
export default async function addAppsConfig()
|
||||
{
|
||||
const conf = config;
|
||||
const files = await readdir('.', { withFileTypes: true});
|
||||
for (const file of files)
|
||||
{
|
||||
if (file.isDirectory())
|
||||
{
|
||||
try {
|
||||
await stat(file.name + '/js/app.ts');
|
||||
config.input[file.name + '/js/app'] = file.name + '/js/app.ts';
|
||||
}
|
||||
catch (e) {
|
||||
try {
|
||||
await stat(file.name + '/js/app.js');
|
||||
config.input[file.name + '/js/app.min'] = file.name + '/js/app.js';
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return conf;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user