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

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

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

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

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

Модули

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

Unpkg

Генератор необходимо добавить после 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.

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