4

我想在 Node.js 上分块运行并使代码直接在服务器上执行(包括逐块执行),而无需先保存 XML 然后在后台运行它;我已经尝试了 npm 上的一些模块,但它们都没有做我想要的,或者它只是运行一个预先生成的 XML。

任何想法?

4

3 回答 3

4

以下是在服务器上执行的步骤:

1)安装xmldomnode.js模块:

$ npm install xmldom

2)克隆谷歌的闭包库(github)。确保克隆的目录名为“closure-library”,并且与您的 blockly 项目位于同一目录级别,如下所示:(图片链接

在此处输入图像描述

3)generate.js在你的blockly项目文件夹中添加一个javascript。注意这里我使用blockly xml来生成python代码。您需要根据您使用的发电机类型调整第 7-10 行。

global.DOMParser = require('xmldom').DOMParser;

global.Blockly = require('./blockly_uncompressed.js');
require('./blocks/math.js');
require('./blocks/text.js');
require('./blocks/lists.js');
require('./generators/python.js');
require('./generators/python/math.js');
require('./generators/python/text.js');
require('./generators/python/lists.js');
require('./msg/messages.js');

var fs = require('fs');

var xmlText = process.argv[2];
try {
    var xml = Blockly.Xml.textToDom(xmlText);
    // Create a headless workspace.
    var workspace = new Blockly.Workspace();
    Blockly.Xml.domToWorkspace(workspace, xml);
    var code = Blockly.Python.workspaceToCode(workspace);
    console.log(code);
} catch (e) {
    console.log(e);
}

generate.js4) 最后,使用预先生成的 XML 字符串运行 node.js :

$ node generate.js '<xml>...</xml>'

参考:

1)无头块状

2)服务器端的块代码生成

3)构建块

于 2016-09-09T02:16:45.077 回答
0
  1. 修复错误

    不推荐调用 Blockly.Xml.domToWorkspace,交换参数。

将行更改Blockly.Xml.domToWorkspace(workspace, xml);Blockly.Xml.domToWorkspace(xml, workspace);

  1. 修复错误

    ReferenceError:文档未定义

    Blockly.Events.disable();调用前添加行Blockly.Xml.domToWorkspace

参考链接

于 2016-12-15T10:35:30.113 回答
0

我确认错误“ReferenceError: document is not defined”出现在最新版本的 blockly 和closure-library

于 2016-09-15T13:27:53.240 回答