Compilation avanzata

Il normale processo di compilazione utilizza il compilatore JavaScript online di Google per ridurre Blockly a una mezza dozzina di file per un totale di circa 720 kB (160 kB compressi). In alternativa, è possibile utilizzare il compilatore JavaScript offline di Google in modalità di "compilazione avanzata", che presenta una serie di vantaggi:

  • Dimensione totale di Blockly ridotta a 300 kB (100 kB compressi) a causa dell'agitazione degli alberi.
  • Tempi di compilazione più rapidi e nessun traffico di rete grazie all'esecuzione del compilatore locale.
  • Compilation illimitate (il compilatore online è a numero limitato).

Configurazione

Ai fini di questo tutorial minimo, inizia creando una nuova directory nella directory root di Blockly.

Scarica il compilatore di chiusura.

Scarica compiler.jar, rinominalo in closure-compiler.jar e posizionalo nella directory.

Verifica che Java Runtime Environment sia in grado di eseguire il compilatore eseguendo questo comando nella riga di comando:

java -jar closure-compiler.jar --version

Piastra caldaia

Innanzitutto, crea un file HTML che definisca una casella degli strumenti Blockly minima e un div in cui inserirla. Per farlo, crea nella tua directory index.html un file contenente questo codice:

<!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>

Assicurati di modificare il percorso della lingua (../msg/js/en.js) come richiesto per il percorso verso Blockly e per la lingua desiderata.

Successivamente, crea un file JavaScript che carichi Blockly e tutti i file dei messaggi o le definizioni dei blocchi necessari, quindi inietta Blockly nel div fornito. Per farlo, crea nella tua directory main.js un file contenente questo codice:

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);

Compila

Compila main.js, Blockly e Closure Library eseguendo il Compilatore Closure dalla riga di comando:

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

Oppure utilizzando il nostro script di compilazione avanzato:

 npm run test:compile:advanced

Punta un browser su index.html per verificare che tutto abbia funzionato.

Ancora più avanzato

Per riduzioni ancora maggiori delle dimensioni, puoi includere solo i componenti Blockly effettivamente utilizzati dall'applicazione. Ad esempio, se la tua applicazione non è configurata per avere un cestino, puoi rimuoverlo dall'elenco dei componenti compilati. Per farlo, elimina il requisito per Blockly.requires dal codice:

// Core
goog.require('Blockly.requires');

Al suo posto, apri core/requires.js e copia tutte le istruzioni obbligatorie nel codice. Puoi quindi commentare quelle che non ti servono.

Tieni presente che il compilatore Closure conserva le licenze nell'output compilato. Per ridurre ulteriormente le dimensioni, puoi eliminare le licenze Apache di Google da questo file di output.

Il compilatore Closure ha molte funzionalità e opzioni. Consulta la relativa documentazione.