Ich habe eine neue Vue-Anwendung erstellt und ausgeführt npm install -s monaco-editor
. Dann habe ich meine App.vue so geändert, dass sie folgendermaßen aussieht:
<template>
<div id="app" style="width: 500px; height: 500px;">
<div ref="editor" style="width: 500px; height: 500px;"></div>
</div>
</template>
<script>
import * as monaco from 'monaco-editor';
export default {
name: 'app',
async mounted() {
const el = this.$refs.editor;
this.editor = monaco.editor.create(el, {
value: "console.log('hello world');",
language: 'javascript',
});
},
};
</script>
Wenn ich die Anwendung ausführe, wird in der JavaScript-Konsole Folgendes angezeigt:
Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/Microsoft/monaco-editor#faq simpleWorker.js:31
You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker 2 simpleWorker.js:33
Error: "Unexpected usage"
loadForeignModule editorSimpleWorker.js:494
_foreignProxy webWorker.js:54
languageFeatures.js:209
_doValidate languageFeatures.js:209
Ich habe versucht, nach dem Fehler zu suchen, aber die meisten Threads scheinen sich auf den Zugriff auf Dateien über file: /// zu konzentrieren, was ich nicht tue (ich greife auf den Knoten-Webserver zu).
Außerdem wird der Editor nur dann korrekt gerendert, wenn die Höhe explizit angegeben ist. Ich glaube nicht, dass dies das erwartete Verhalten ist.
Wie kann ich dafür sorgen, dass Monaco-Editor in Vue korrekt funktioniert? Ich möchte inoffizielle Wrapper von Drittanbietern wie https://github.com/egoist/vue-monaco nach Möglichkeit aus Supportgründen vermeiden .
Node / Vue-Neuling, also sei bitte nett!
quelle
Antworten:
Monaco greift
file://
standardmäßig auf Mitarbeiter zu , arbeitet jedoch nicht im Web.Sie sollten es
http://
durch ersetzen, indem Sie MonacoEnviorment manuell einstellen oder das Monaco Webpack Plugin verwenden .Siehe die offiziellen Dokumente
quelle
Geben Sie das Monaco-
webpack
Plugin in Ihrer Webpack-Konfiguration an:Oder installieren Sie das Monaco-Editor-Webpack-Plugin und versuchen Sie es stattdessen:
Für das
height
undwidth
können Sie entweder die Fenstergröße anhören und aufrufeneditor.layout()
oder die Containergröße berechnen und die Größe an dieeditor.layout()
Methode (1) übergeben .Oder Sie können etwas aus anderen geposteten Antworten in ähnlichen Threads ausprobieren, zum Beispiel:
Oder so ähnlich:
quelle
require('monaco-editor/webpack')
nicht, auf meinem installieren - es gibt keine/webpack
aufnode_modules/monaco-editor
. Wie / was hast du installiert?package.json
über diese Projekte könnte informieren.monaco.editor.create()
der Editor seine Größe vom Containerelement erhält. Wäre schön, das gleiche Verhalten wie VS Code zu bekommen.editor.layout()
die Containergröße aufrufen oder berechnen und die Größe an dieeditor.layout()
Methode übergeben