我想在 Node.js 上分块运行并使代码直接在服务器上执行(包括逐块执行),而无需先保存 XML 然后在后台运行它;我已经尝试了 npm 上的一些模块,但它们都没有做我想要的,或者它只是运行一个预先生成的 XML。
任何想法?
我想在 Node.js 上分块运行并使代码直接在服务器上执行(包括逐块执行),而无需先保存 XML 然后在后台运行它;我已经尝试了 npm 上的一些模块,但它们都没有做我想要的,或者它只是运行一个预先生成的 XML。
任何想法?
以下是在服务器上执行的步骤:
1)安装xmldom
node.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.js
4) 最后,使用预先生成的 XML 字符串运行 node.js :
$ node generate.js '<xml>...</xml>'
参考:
1)无头块状
3)构建块
不推荐调用 Blockly.Xml.domToWorkspace,交换参数。
将行更改Blockly.Xml.domToWorkspace(workspace, xml);
为Blockly.Xml.domToWorkspace(xml, workspace);
修复错误
ReferenceError:文档未定义
Blockly.Events.disable();
调用前添加行Blockly.Xml.domToWorkspace
参考链接
我确认错误“ReferenceError: document is not defined”出现在最新版本的 blockly 和closure-library