El proceso de compilación habitual utiliza el compilador JavaScript en línea de Google para reducir Blockly a media docena de archivos con un total de alrededor de 720 KB (160 KB comprimidos). De manera alternativa, se puede usar el compilador JavaScript sin conexión de Google en el modo de "compilación avanzada", que presenta varias ventajas:
- El tamaño total de Blockly se redujo a 300 KB (100 KB comprimidos) debido a la sacudida de árboles.
- Tiempos de compilación más rápidos y sin tráfico de red debido a la ejecución local del compilador.
- Compilaciones ilimitadas (el compilador en línea tiene un límite de frecuencia).
Configuración
A los fines de este instructivo mínimo, comienza por crear un directorio nuevo en el directorio raíz de Blockly.
Descarga Closure Compiler.
Descarga compiler.jar, cámbiale el nombre a closure-compiler.jar
y colócalo en el directorio.
Para verificar que Java Runtime Environment pueda ejecutar el compilador, ejecuta lo siguiente en la línea de comandos:
java -jar closure-compiler.jar --version
Placa de caldera
Primero, crea un archivo HTML que defina una caja de herramientas mínima de Blockly y un div para insertarla. Para ello, crea un archivo en tu directorio llamado index.html
que contenga este código:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Blockly: Advanced Compilation</title> <script src="main_compressed.js"></script> <script src="../msg/js/en.js"></script> </head> <body> <h1>Blockly: Advanced Compilation</h1> <div id="blocklyDiv" style="height: 480px; width: 600px;"></div> <xml id="toolbox" style="display: none"> <block type="controls_if"></block> <block type="logic_compare"></block> <block type="controls_repeat_ext"></block> <block type="math_number"></block> <block type="math_arithmetic"></block> <block type="text"></block> <block type="text_print"></block> </xml> </body> </html>
Asegúrate de editar la ruta de acceso del idioma (../msg/js/en.js
) según sea necesario para tu ruta de acceso a Blockly y para tu idioma deseado.
Luego, crea un archivo JavaScript que cargue Blockly y todos los archivos de mensajes o definiciones de bloque necesarios y, luego, inserte Blockly en el elemento div proporcionado. Para ello, crea un archivo en tu directorio llamado main.js
que contenga este código:
goog.provide('Main'); // Core goog.require('Blockly.requires'); // Blocks goog.require('Blockly.Constants.Logic'); goog.require('Blockly.Constants.Loops'); goog.require('Blockly.Constants.Math'); goog.require('Blockly.Constants.Text'); Main.init = function() { Blockly.inject('blocklyDiv', { 'toolbox': document.getElementById('toolbox') }); }; window.addEventListener('load', Main.init);
Compilación
Compila main.js
, Blockly y Closure Library en conjunto; para ello, ejecuta el Closure Compiler desde la línea de comandos:
java -jar closure-compiler.jar --js='main.js' \ --js='../blocks/**.js' \ --js='../core/**.js' \ --js='../generators/**.js' \ --generate_exports \ --externs ../externs/svg-externs.js \ --compilation_level ADVANCED_OPTIMIZATIONS \ --dependency_mode=PRUNE --entry_point=Main \ --js_output_file main_compressed.js
O mediante nuestra secuencia de comandos de compilación avanzada:
npm run test:compile:advanced
Apunta un navegador a index.html
para verificar que todo funcionó correctamente.
Mucho más avanzado
Para reducciones de tamaño aún mayores, puedes incluir solo los componentes de Blockly que tu aplicación realmente usa. Por ejemplo, si tu aplicación no está configurada para tener una papelera, puedes quitarla de la lista de componentes en los que se compila. Para ello, borra el requisito de Blockly.requires
de tu código:
// Core goog.require('Blockly.requires');
En su lugar, abre core/requires.js
y copia todas las declaraciones exigir en tu código. Luego, puedes comentar las que no necesites.
Ten en cuenta que el Closure Compiler conserva las licencias en el resultado compilado. Puedes quitar las licencias de Apache de Google de este archivo de salida para reducir aún más el tamaño.
El Closure Compiler tiene muchas funciones y opciones. Consulta su documentación.