Bundling
Client side source code must be optimized
There are two distinct modes into TAO :
DEBUG
mode (aka Development mode)PRODUCTION
mode (aka Bundle mode)
You can change the mode by switching the value of the constant DEBUG_MODE
into config/generis.conf.php
The main difference between those two modes is the client side source code is optimized. Per extension, the source code is aggregated into bundles, transformed and optimized :
The bundler is available as a Grunt task in the repository oat-sa/grunt-tao-bundle.
- The bundler create bundles per extension and per target (backoffice, frontoffice, separate entry point, etc.)
- Libraries and the core framework are in a
vendor
bundle - The optimizer supports UglifyJs and Babel
- Each extension needs to configure its bundles into the files
views/build/grunt/bundle.js
- Bundling is done during the release of an extension, not during it's development.
For example :
module.exports = function(grunt) { //it's a Grunt configuration so we're in a node.js process
'use strict';
grunt.config.merge({ //add it to the configuration
bundle : { //the config entry is always bundle
taoce : { //name the task like the extension, lowercase, by convention
options : { //define the bundles options
extension : 'taoCe',
outputDir : 'loader',
bundles : [{
name : 'taoCe',
default : true,
babel : true //babel is used to transpile the code
}]
}
}
}
});
grunt.registerTask('taocebundle', ['bundle:taoce']); //register a task alias
};
Per extension you can generate the bundle using the following command, the task name is ${extensionNameLowerCase}bundle
, so to bundle the extension taoCe
you'll run :