无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt

Can not load Ace.js editor mode and themes (namespaces project & AMD require.js & grunt

本文关键字:amp js 项目 命名空间 grunt require AMD Ace 加载 编辑器 模式      更新时间:2023-09-26

我们有一个完全按名称命名的大型javascript应用程序。我们使用require.js加载所有内容(需要命名空间上的生命),然后使用grunt将100+/-js文件(包括库)编译为一个缩小的文件。

我可以用加载ace.js

define(['ace/ace'], function (ace) {....

我能够创建一个编辑器,如

var editor = ace.edit("editor");

然而,我不确定是否加载模式和主题。当我尝试。。

editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");

请求尝试在web根目录中查找该文件。

mysite.com/theme-monokai.js

然而,这些文件需要与其他文件一起编译,并放入一个大的缩小文件中。

我想我需要在我的define语句中包含主题和模式,但我已经尝试过了,虽然我可以获得诸如之类的主题对象

define(['ace/mode-javascript'], function (mode_js) {
console.log('mode loaded just fine')
console.log(mode_js)
...

然而,我没有任何运气尝试将对象传递到setTheme和setMode函数中。

editor.setTheme(ace_theme);
editor.getSession().setMode(mode_js);

所有这些的最终结果是,我有一个王牌编辑在工作,但没有突出显示或主题。行编号工作,选项卡工作。我不确定这些东西是否在主ace.js中,或者它是否成功加载了依赖项,只是无法加载或无法将主题/模式路径映射到它们的加载方式。

有没有办法用配置来设置主题和模式的默认值?这可能会有所帮助。有人知道我缺了什么吗?

谢谢。

我使用的ace.js构建的文件夹/文件结构如下

/ace/ace.js
/ace/mode-javascript.js
/ace/theme-textmate.js
etc
etc

问题是,王牌期待着魔法之路("ce/theme/textmate")我需要的是要求获得对文件(真实文件)的正确引用,并在所有文件缩小并合并为一个文件后对ace("ce/theme/textmate")进行正确引用。

解决方案是

  1. 更改文件夹/文件名结构以模拟预期的内容。所以我在/ace目录下创建了一个名为mode的文件夹。我将mode-javascript.js重命名为javascript.js,并将其放在新的模式文件夹中。

  2. 我把这个文件添加到我项目中的define()调用中,这样它就会被认为需要添加到组合文件中。

    define(['ace/ace','ace/mode/javascript'],function(ace,ace_mode){…

  3. 在此之后,我对ace_mode不做任何操作,但我需要requirejs看到它,以便将它添加到组合文件中。

  4. 在这之后,我使用魔术串,就像王牌网站对说的那样

    editor.getSession().setMode("ace/mode/javascript");

我对主题也做了同样的事情。到目前为止,它似乎正在发挥作用。我有主题,语法突出显示,代码折叠等工作。

还有一件事要提。正如我所说,我们的项目是名称空间CXX,并且需要在该名称空间中生存。Ace在窗口上查找require或其自己的名称空间"Ace",这两个都不是我想要的,所以我删除了Ace文件底部的代码,该代码试图启动Ace本身并将其分配给全局变量。通过删除此代码,我的define调用能够像加载一个最合适的AMD模块一样加载Ace。主要地