我想让摩纳哥编辑在Electron中运行 . 我找到了摩纳哥的电子示例,但它们不适用于我的应用程序 .
我得到的只是错误:
"loader.js:1817 Uncaught Error: Unrecognized require call"
"angular.js:13920 Error: Check dependency list! Synchronous require cannot resolve module 'fs'. This is the first mention of this module! at e.synchronousRequire (loader.js:1063)"
如果摩纳哥的loader.js不包含在脚本文件中,则一切正常 .
当我尝试包含“fs”模块时,错误出现在文件开头的一个AngularJS服务中:
var fs = require("fs");
但正如所说:没有包含monaco loader.js文件,这是正常的 .
有什么建议我可以解决这个问题吗?我想在我的Electron应用程序中包含monaco编辑器,并且最好在我的AngularJS指令和/或服务中访问它 . 与ACE编辑器相比,可以简化我的应用程序 .
4 回答
它看起来像
loader.js
一样覆盖了Node.js的require
函数 . 而是直接加载html,将其作为节点模块加载 .有关详细信息,请参见vscode-loader github页面 .
目前我正在使用以下方式在我的Electron应用程序中将Monaco编辑器与AngularJS集成:
在我的HTML文件中使用这些行,我正在加载amdRequire for Monaco并保存/恢复Node.js需要 .
在我的AngularJS控制器中,我可以使用以下行加载Monaco编辑器:
那现在工作正常 .
然而,摩纳哥在不同语言的各种项目中的整合是屁股过程中的一个难题 . 摩纳哥团队已“确认”并正在进行整合过程 .
我发现我的用例最干净的方法是将其加载到iframe中 . 这可以避免与您当前系统的所有冲突 . 您可以使用
$("#iframe-id").contentWindow.editor.getValue()
访问内容 . (注意,这假设在iframe中,您将编辑器引用存储在名为editor
的全局变量中)请参阅此页面了解如何:https://github.com/Microsoft/monaco-editor-samples/tree/master/sample-iframe
我正在使用Monaco和NW.JS,所以使用编辑器的电子要求是相似的 . 这需要我在加载Monaco loader.js脚本之前保持当前上下文的require函数,因为此脚本将自定义monaco AMD加载程序设置为全局require . 在加载loader.js之后,我将Monaco加载器保存到一个单独的全局变量中,或许meRequire并将NW.JS全局需求恢复到首先保持的状态 .
现在创建编辑器实例只需使用meRequire
我创建了一个用于创建Monaco编辑器实例的敲除绑定并将其放在GitHub上 . 它不使用node或npm包而是下载所有源 . 您可以在以下位置找到它:https://github.com/simpert/MonacoEditorKnockoutBindingHandler.git
此外,编辑器的playground是如何使用编辑器和GitHub上的samples的示例的一个很好的来源,给出了NW.JS和Electon使用的示例 .