5

我想用自定义语言的模式扩展 ace。据我所知,一般流程是:

  1. 下载王牌源。
  2. 为您的自定义语言创建一个新的 lib/ace/mode/foo.js。
  3. 运行“make build”(或类似的)来重建 ACE。
  4. 在您的网站中使用新编译的 build/src-min-no-conflict(或其他)ACE 发行版。

但我只想使用他们网站上现有的 ACE 发行版,并结合我独立的新模式。我不想在构建过程中重新构建 ACE 来构建我的新模式。我通过这样做接近了:

ace.config.setModuleUrl("foo-mode", "./foo.js");
session.setMode("foo-mode");

但我很快就遇到了 requirejs / 依赖问题。例如,我不能require("ace/mode/matching_brace_outdent")在我的模式内做。setMode('ace/mode/c_cpp')我通过第一次调用(作为副产品定义了matching_brace_outdent 模块)暂时解决了这个问题。但是我在尝试让自定义的 WorkerClient 工作时遇到了更糟糕的问题。

将我的模式构建为 ACE 的一部分是我唯一的选择吗?还是我错过了什么?

4

2 回答 2

1

尝试预构建的版本。

https://github.com/ajaxorg/ace-builds/releases

您可能需要编辑其他文件(模式列表等),具体取决于您希望在 UI 中呈现新语言的方式:

于 2013-08-30T23:11:47.897 回答
1

关于require非工作器的自定义模式下的无冲突模式,如果您将自定义模式定义为一个模块或内部的一系列模块defineor ace.define,您应该能够require在函数包装器中使用提供给您的内容:

ace.define("ace/mode/your_module_name",
        ["require","exports","module","ace/your_other_dependencies"],
        function(require, exports, module) {

    // you can use require('...') here
});

相信你也可以使用ace.require.

我不太确定如何“手动构建”自定义工作者,但是按照这个答案,我想我可以通过围绕相对苗条worker-json.js的核心复制代码来让它工作。

于 2017-06-14T05:37:24.907 回答