Cuando una extensión se compila, se tienen en cuenta tres procesos: copiar los archivos, exportar la estructura de la base de datos y recolectar datos. Para ello, se utilizan tres sistemas: components, db_queries y xdata, respectivamente.
Copiar archivos es sencillo si los tenemos bien organizados. Para ello, utilizamos el concepto de componentes, los componentes serán carpetas con el nombre del alias de la extensión. El compilador sólo tendrá que buscar estas carpetas en los siguientes espacios:
app/
cms/libraries/
cms/plugins/
cms/scripts/
cms/snippets/
media/
vendor/
La estructura de la base de datos incluirá tablas, funciones, procedimientos y disparadores.
Se exportarán de dos modos: como un archivo sql y como uno json. Este último modo, permite modificar las bases de datos de las distribuciones, incluido renombrar tablas y campos.
El compilador va a exportar todas las tablas cuyo nombre comience con el nombre del alias. Por ejemplo, si tenemos la extensión con el alias de nombre posts, exportará la tabla posts y todas las que se llamen posts_*.
A su vez, serán exportadas las funciones y los procedimientos cuyo nombre esté escrito en camelCase y su segundo texto sea el alias. Para el mismo ejemplo anterior, el compilador exportará createPosts o removePostsTags.
Todos los datos serán distribuidos a través de archivos json, ya sea que provengan de la base de datos o de archivos. Esto se hace para agregar capas de procesamiento de datos y seguridad.
Los datos pueden ser: configuraciones, menús, permisos de ususarios, activos, etc.
El sistema que los recolecta y los distribuye se llama xdata.
Un proceso de datos de los más importantes de xdata es el que permite combinar, en la instalación de actualizaciones, los datos existentes, con los datos que trae el paquete de actualización.