javascript - 如何将 Monaco 与 Vue.js 集成?

标签 javascript vue.js

我创建了一个新的 vue 应用程序并运行 npm install -s monaco-editor ,然后我将 App.vue 更改为如下所示:

<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>

当我运行应用程序时,我在 JavaScript 控制台中看到以下内容:
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

我已经尝试搜索错误,但大多数线程似乎都专注于通过 file:///访问文件,我没有这样做(我正在访问节点网络服务器)。

此外,除非明确指定高度,否则编辑器无法正确呈现 - 我认为这不是预期的行为。

如何让 monaco-editor 在 Vue 中正常工作?我想避免使用非官方的第三方包装器,例如 https://github.com/egoist/vue-monaco如果可能,出于支持原因。

Node/Vue 新手,请善待!

最佳答案

尝试指定摩纳哥 webpack webpack 配置中的插件:

const monacoWebpackPlugin = require('monaco-editor/webpack')

...

plugins: [
  new monacoWebpackPlugin()
]

或安装monaco-editor-webpack-plugin并尝试使用它:
const monacoWebpackPlugin = require('monaco-editor-webpack-plugin')

...

plugins: [
  new monacoWebpackPlugin()
]

至于heightwidth ,您可以收听窗口调整大小并调用 editor.layout()或计算容器大小并将大小传递给 editor.layout()方法(1) .

或者,您可以尝试类似主题中其他已发布答案的内容,例如:
<div ref="editor" class="monaco-editor"></div>
.monaco-editor {
  height: 100vh;
  overflow: hidden;
}

body {
  margin: 0;
  padding: 0;
}


或者是这样的:
.monaco-editor {
  position: absolute; 
  left: 0; 
  top: 0;
  width: 100%; 
  height: 100%; 
  max-height: 100% !important;
  margin: 0; 
  padding: 0;
  overflow: hidden;
}

关于javascript - 如何将 Monaco 与 Vue.js 集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58592128/

相关文章:

javascript - momentjs - 创建最近 30 天的数组

javascript - 使用 Jquery 将 div 数字内容替换为字符串

vue.js - 在 Vue 应用程序中导入 @aspnet/signalr

javascript - 如何将文件输入的点击函数绑定(bind)到 "v-on"事件?

Laravel 默认使用 Vuejs 进行身份验证,仅在登录后提供 spa

javascript - Mocha 在运行 CasperJS 测试时不考虑超时或完成回调

javascript - 为什么我的去抖函数返回未定义的值?

javascript - 为什么我的新闻通讯表单在 Amazon CloudFront 上不起作用?

vue.js - 在 vue 3 : createElement is not a function 中使用 vue-chartjs

javascript - 将 Prop 传递到模板中