ACE 编辑器 - 允许在 Angular/TypeScript 中自定义模式和主题

Luk*_*ggy 7 sql ace-editor typescript angular

介绍:

我有一个 Angular 应用程序,可以使用 ACE 编辑器 ( https://ace.c9.io/ ) 编写自定义 SQL 语句。尽管有模式和主题SQL,但我想根据我的要求创建自定义模式和自定义主题。


设置:

我遵循了本教程:https://blog.shhdharmen.me/how-to-setup-ace-editor-in-angular

  • ng new ace-app(角度13.3.2)
  • npm install ace-builds(ACE-构建 1.4.14)

component.ts

import * as ace from 'ace-builds';

...

public aceEditor: ace.Ace.Editor;

@ViewChild('editor') private editor!: ElementRef<HTMLElement>;

...

  ngAfterViewInit(): void {
    // I don't understand why we don't set the "basePath" to our installed package
    ace.config.set('basePath', 'https://unpkg.com/ace-builds@1.4.12/src-noconflict');

    this.aceEditor = ace.edit(this.editor.nativeElement);

    if (this.aceEditor) {
      this.aceEditor.setOptions({
        mode: 'ace/mode/sql',
        theme: 'ace/theme/sqlserver',
      });
    }
Run Code Online (Sandbox Code Playgroud)

component.html

<div #editor></div>
Run Code Online (Sandbox Code Playgroud)

结果:

编辑器正在工作,但现在我需要以某种方式添加自定义模式和主题。

带有 sql 语句的 ACE 编辑器框


问题和疑问:

  • basePath如果我已经安装了该软件包(由于编辑 1 而已过时),将 设为外部 URL 是否正确?
  • 如何以及在哪里添加自定义 mode.js 和 theme.js?
  • 如何将 ace 定向到自定义 mode.js 和 theme.js?

编辑1:

我设法摆脱了这行代码:

ace.config.set('basePath', 'https://unpkg.com/ace-builds@1.4.12/src-noconflict');
Run Code Online (Sandbox Code Playgroud)

通过直接导入主题和模式:

import 'ace-builds/src-noconflict/mode-sql';
import 'ace-builds/src-noconflict/theme-sqlserver';
Run Code Online (Sandbox Code Playgroud)

其余代码无需更改。

Luk*_*ggy 4

在查看了几个项目和问题后,我发现为 ACE 编辑器实现自定义主题和模式的最佳方法是将现有主题和模式./node-modules/ace-builds/src-conflict./src/assets/ace.

例子:

复制一个现有模式(以及可选的主题),该模式代表您所需的语法,突出显示最多,在我的例子中是mode-sql.js. 我将文件复制到./src/assets/ace并更改了导入component.ts

import 'ace-builds/src-noconflict/mode-sql';
import 'ace-builds/src-noconflict/theme-sqlserver';
Run Code Online (Sandbox Code Playgroud)

到:

import '../../../../assets/ace/mode-sql.js';
import '../../../../assets/ace/theme-sqlserver.js';
Run Code Online (Sandbox Code Playgroud)

其他一切都完全按照最初问题中的描述进行保存。从那里您可以开始更改模式和主题的名称,根据您的要求更新规则和样式。