我正在尝试将ace
文字编辑器与angular
一起使用,其中一项所需行为需要调用ace.require
。
我已经包含了相应的文件,但我看到如果我缩小我的javascript源代码,那就不再适用了。这显然是因为路径变得无效,但我不确定如何处理这种情况,除了在我的优化包之外手动加载所提到的文件。我使用ASP.NET MVC Web Optimization Framework
加载我的javascripts作为"捆绑"这是紧凑和缩小的。
我正在使用 ui-ace 指令来加载它,但我已经测试过没有任何指令,无论我是否通过角度,行为都是一样的。
还有其他人发现了解决方法吗?
这是非常简单的代码......
bundles.Add( new ScriptBundle( "~/bundles/js/ace" )
// include the ace text editor
.Include( "~/application/assets/scripts/ace/ace.js" )
.Include( "~/application/assets/scripts/ace/ext-language_tools.js" )));
if (angular.isDefined(opts.require)) {
opts.require.forEach(function (n) {
window.ace.require(n);
});
}
这也可以明确键入......
ace.require('ace/ext/language_tools');
<div ng-model="Model.Scripting"
ui-ace="{
useWrapMode: true,
showGutter: true,
theme: 'chrome',
mode: 'javascript',
require: ['ace/ext/language_tools'],
advanced: {
enableSnippets: true,
enableBasicAutocompletion: true,
enableLiveAutocompletion: true
}
}">
</div>
由于我无法找到一种方法来完全按照需要将整件事情发送给您,因此我使用nodejs
,bower
和{{1}重新创建了行为}。
首先在nodejs中的新文件夹中运行这些命令。
gulp
npm install bower
npm install gulp
npm install gulp-concat
npm install gulp-rename
npm install gulp-uglify
npm install run-sequence
bower install angular
bower install ace-builds
您可以使用此bower install angular-ui-ace
来构建脚本文件。
gulpfile.js
这是一个可以重现问题的HTML文件。
var
gulp = require('gulp'),
concat = require('gulp-concat'),
rename = require('gulp-rename'),
uglify = require('gulp-uglify'),
sequence = require('run-sequence');
gulp.task('default', function() {
return sequence([
"ace"
]);
});
gulp.task('ace', function() {
return gulp.src([
'bower_components/angular/angular.js',
'bower_components/angular-ui-ace/ui-ace.js',
'bower_components/ace-builds/src-noconflict/ace.js',
'bower_components/ace-builds/src-noconflict/mode-javascript.js',
'bower_components/ace-builds/src-noconflict/worker-javascript.js',
'bower_components/ace-builds/src-noconflict/theme-chrome.js',
'bower_components/ace-builds/src-noconflict/snippets/text.js',
'bower_components/ace-builds/src-noconflict/snippets/javascript.js'])
.pipe(concat('scripts.js'))
.pipe(uglify())
.pipe(gulp.dest('js'));
});
答案 0 :(得分:6)
要使ace.require工作,您需要将ext-language_tools添加到gulp.task("ace")
'bower_components/ace-builds/src-noconflict/ace.js',
'bower_components/ace-builds/src-noconflict/ext-language_tools.js',
'bower_components/ace-builds/src-noconflict/mode-javascript.js',
因为需要在webworker中加载,所以捆绑中不需要 bower_components/ace-builds/src-noconflict/worker-javascript.js
。为此,您需要将workerPath配置为指向正确的文件夹
ace.initialize = function(editor) {
ace.require("ace/config").set("workerPath",
"bower_components/ace-builds/src-min-noconflict");
ace.require("ace/ext/language_tools");
并且因为它的高度设置为0而最初无法看到ace,请参阅此问题:Ace editor doesn't work with bootstrap
另请注意,fontFamily: 'Consolas'
可能会在缺少该字体的系统上出现问题,因此最好将后备广告添加到等宽广如fontFamily: 'Consolas', monospace
答案 1 :(得分:0)
如果以上解决方案不适合您(工作人员仍未正确加载),请参阅我在github(lahdo)上的回答: