6

我一直在开发一个使用 Cloud9 提供的 Ace 浏览器内代码编辑器的 MVC Web 应用程序。ace.js 脚本和设置 ace 编辑器的脚本都在我的 BundleConfig 上的 ScriptBundle 中。捆绑包正在加载非常好。在我的本地服务器上,在 web.config 中将调试设置为 true,脚本运行得非常好。但是,在 web.config 中将调试设置为 false 的情况下启动到实时服务器后,出现了几个错误。

在修复了一些小故障之后,仍然存在两个我似乎无法理解原因的错误。这两个错误看起来非常相似,因为它们都是 Ace 的 chrome 主题和 Ace 的 HTML 模式脚本的 404 not found 错误。在设置编辑器的脚本中,它们的调用如下:

editor.setTheme("ace/theme/chrome");
editor.getSession().setMode("ace/mode/html");

在我的本地计算机上,调试设置为 true,主题和模式设置得非常好,一切都按计划进行。但是,正如我所说,在调试设置为 false 的实时服务器上,因此缩小了我的 ScriptBundles 中的所有脚本,我得到了主题和模式的 404 错误。

当我在 Google Chrome 中打开 JavaScript 控制台时,我被告知两个 404 错误。404 错误的有趣之处在于它们链接到我正在查看的页面的当前目录,然后分别是“theme-chrome.js”和“mode-html.js”。他们从来没有在那个目录中,现在仍然没有。

所以我的问题是为什么脚本在缩小后开始在当前目录中查找它们的文件?我可以做些什么来解决这个问题,以便我可以将它们缩小、打包并让它们工作?或者有什么办法吗?

感谢您提前提供的帮助。

4

2 回答 2

12

我发现使用 Ace 和 MVC 捆绑和缩小,我需要使用绝对引用在 ace 配置中设置 basePath。

ace.config.set("basePath", "/Scripts/FullPathToMy/AceEditorDirectory");

这可能不是最好的解决方案,但它应该能让你上路。

于 2013-08-21T02:16:16.180 回答
3

Ace 在缩小时不解析基本路径的原因是因为缩小后的版本是一个新的唯一名称,与此模式不匹配:^(.*)\/ace(\-\w+)?\.js(\?|$)/. Ace 使用该模式来查找创建它的脚本元素,并使用该src属性来确定路径。

@Paul 的答案是最好的,但如果由于某种原因你不能这样做,Ace 还会检查以任何脚本标记data-ace-的一部分开头的属性中的选项。

System.Web.Optimization v 1.10中,您可以使用Scripts.RenderFormat(format, script)呈现脚本标记来指定基本路径。

注意:在其他 Stack Overflow 答案中,他们说要使用Microsoft.AspNet.Web.Optimization,但现在情况已不再如此。您可能必须使用nuget来更新您的版本。

MVC 版本

@Scripts.RenderFormat(@"<script src=""{0}"" data-ace-base=""/Scripts/ace/""></script>", "~/bundlepath")

网络表单版本

<%: Scripts.RenderFormat(@"<script src=""{0}"" data-ace-base=""/Scripts/ace/""></script>", "~/bundlepath") %>
于 2013-09-24T16:34:15.290 回答