Генерация и запуск кода

Ваше приложение может генерировать код в любое время. Например, он может генерировать код, когда конечный пользователь нажимает кнопку или каждый раз, когда пользователь вносит изменения.

Обзор генерации кода см. в разделе Генерация кода .

Импортировать генератор языковых кодов

Для генерации кода вам понадобится генератор языкового кода. Вы можете импортировать генераторы языкового кода любым из следующих методов.

Модули

import {javascriptGenerator} from 'blockly/javascript';
import {pythonGenerator} from 'blockly/python';
import {phpGenerator} from 'blockly/php';
import {luaGenerator} from 'blockly/lua';
import {dartGenerator} from 'blockly/dart';

// Generate code for all the blocks in the workspace.
const jsCode = javascriptGenerator.workspaceToCode(workspace);
const pythonCode = pythonGenerator.workspaceToCode(workspace);
const phpCode = phpGenerator.workspaceToCode(workspace);
const luaCode = luaGenerator.workspaceToCode(workspace);
const dartCode = dartGenerator.workspaceToCode(workspace);

Распаковать

Вы должны включить генератор после включения Blockly.

<script src="https://unpkg.com/blockly"></script>
<script src="https://unpkg.com/blockly/javascript_compressed"></script>
<script src="https://unpkg.com/blockly/python_compressed"></script>
<script src="https://unpkg.com/blockly/php_compressed"></script>
<script src="https://unpkg.com/blockly/lua_compressed"></script>
<script src="https://unpkg.com/blockly/dart_compressed"></script>
// Generate code for all the blocks in the workspace.
const jsCode = javascript.javascriptGenerator.workspaceToCode(workspace);
const pythonCode = python.pythonGenerator.workspaceToCode(workspace);
const phpCode = php.phpGenerator.workspaceToCode(workspace);
const luaCode = lua.luaGenerator.workspaceToCode(workspace);
const dartCode = dart.dartGenerator.workspaceToCode(workspace);

Локальные скрипты

Вы должны включить генератор после включения Blockly.

<script src="blockly_compressed.js"></script>
<script src="javascript_compressed.js"></script>
<script src="python_compressed.js"></script>
<script src="php_compressed.js"></script>
<script src="lua_compressed.js"></script>
<script src="dart_compressed.js"></script>
// Generate code for all the blocks in the workspace.
const jsCode = javascript.javascriptGenerator.workspaceToCode(workspace);
const pythonCode = python.pythonGenerator.workspaceToCode(workspace);
const phpCode = php.phpGenerator.workspaceToCode(workspace);
const luaCode = lua.luaGenerator.workspaceToCode(workspace);
const dartCode = dart.dartGenerator.workspaceToCode(workspace);

Создать код

Чтобы сгенерировать код, используйте функцию генератора workspaceToCode .

const code = javascriptGenerator.workspaceToCode(workspace);

Постоянные обновления

Непрерывные обновления позволяют отображать или запускать код всякий раз, когда пользователь вносит изменения. Генерация кода — это быстрая операция, поэтому это не оказывает большого влияния на производительность. Это делается с помощью прослушивателя событий .

const supportedEvents = new Set([
  Blockly.Events.BLOCK_CHANGE,
  Blockly.Events.BLOCK_CREATE,
  Blockly.Events.BLOCK_DELETE,
  Blockly.Events.BLOCK_MOVE,
]);

function updateCode(event) {
  if (workspace.isDragging()) return; // Don't update while changes are happening.
  if (!supportedEvents.has(event.type)) return;

  const code = javascriptGenerator.workspaceToCode(workspace);
  document.getElementById('textarea').value = code;
}

workspace.addChangeListener(updateCode);

Добавьте преамбулу или постскриптум

После того как вы сгенерировали код, вы можете при желании включить код до начала или после конца сгенерированного кода.

let code = javascriptGenerator.workspaceToCode(workspace);
// Add a preamble and a postscript to the code.
const preamble = 'import {MyLibrary} from \'/path/to/my/library\';\n'
const postscript = 'MyLibrary.myKickoffFunction();\n';
code = preamble + code + postscript;

Код преамбулы обычно используется для включения внешних определений в начале кода. Код Postscript обычно используется для вызова функций, запускающих поведение в конце кода.

Если сгенерированный код можно запустить «как есть», нет необходимости включать преамбулу или постскриптум.

Выполнить код

После того, как вы сгенерировали код, вам нужно выяснить, как его выполнить. Решение о том, как его выполнить, очень зависит от приложения и выходит за рамки Blockly.

Если вы хотите выполнить код JavaScript, см. раздел «Создание и запуск JavaScript» . Здесь обсуждаются некоторые особенности генератора кода JavaScript, а также JSInterpreter , который команда Blockly рекомендует как способ безопасного выполнения JavaScript.

Другие языки требуют других инструментов.