## Bundling

Client side source code must be optimized

There are two distinct modes into TAO :

1. DEBUG mode (aka Development mode)
2. 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',
};
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 :