Ваше приложение может генерировать код в любое время. Например, код может генерироваться при нажатии пользователем кнопки или каждый раз, когда пользователь вносит изменения.
Обзор процесса генерации кода см. в разделе «Генерация кода» .
Импорт генератора языковых кодов
Для генерации кода вам потребуется генератор языкового кода. Вы можете импортировать генераторы языкового кода любым из следующих способов.
Модули
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.
Для других языков требуются другие инструменты.