Compilação avançada

O processo de compilação normal usa o compilador JavaScript on-line do Google para reduzir o Blockly a meia dúzia de arquivos, totalizando cerca de 720 KB (160 KB compactados). Como alternativa, é possível usar o compilador JavaScript off-line do Google no modo de "compilação avançada", que tem uma série de vantagens:

  • O tamanho total do Blockly foi reduzido para 300 KB (100 KB compactado) devido ao tree shaking.
  • Tempos de compilação mais rápidos e nenhum tráfego de rede devido à execução do compilador local.
  • Compilações ilimitadas (o compilador on-line tem limitação de taxa).

Configuração

Para os fins deste tutorial mínimo, comece criando um novo diretório no diretório raiz do Blockly.

Fazer o download do closure Compiler.

Faça o download do compiler.jar, renomeie-o como closure-compiler.jar e coloque-o no seu diretório.

Verifique se o Java Runtime Environment pode executar o compilador executando isto na linha de comando:

java -jar closure-compiler.jar --version

Chapa

Primeiro, crie um arquivo HTML que defina uma caixa de ferramentas mínima do Blockly e um div no qual injetá-lo. Para fazer isso, crie um arquivo no diretório chamado index.html que contenha 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>

Edite o caminho do idioma (../msg/js/en.js) conforme necessário para o caminho para o Blockly e para o idioma desejado.

Depois, crie um arquivo JavaScript que carregue o Blockly e todos os arquivos de mensagem necessários ou definições de bloco e injeta o Blockly no div fornecido. Para fazer isso, crie um arquivo no seu diretório chamado main.js contendo 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);

Compilação

Compile main.js, Blockly e closure Library juntos executando o closure Compiler na linha de 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

Ou usando nosso script de compilação avançado:

 npm run test:compile:advanced

Aponte um navegador para index.html para verificar se tudo funcionou.

Ainda mais avançado

Para reduções de tamanho ainda maiores, você pode incluir apenas os componentes do Blockly que seu aplicativo realmente usa. Por exemplo, se o aplicativo não estiver configurado para ter uma lixeira, você poderá removê-la da lista de componentes compilados. Para fazer isso, exclua o requisito de Blockly.requires do código:

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

No lugar dele, abra core/requires.js e copie todas as instruções exigidas no código. Você pode comentar os que não precisa.

Observe que o closure Compiler preserva licenças na saída compilada. Você pode remover as licenças Apache do Google desse arquivo de saída para reduzir ainda mais o tamanho.

O closure Compiler tem muitos recursos e opções. Consulte a documentação dele.