MonacoをVue.jsと統合するにはどうすればよいですか?


8

新しい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:///を介してファイルにアクセスすることに焦点を合わせているようです(私が行っていない(ノードのWebサーバーにアクセスしています))。

さらに、高さが明示的に指定されていない限り、エディターは正しくレンダリングされません。これは予想される動作ではないと思います。

Vueでモナコエディターを正しく機能させるにはどうすればよいですか?サポートの理由で可能であれば、https://github.com/egoist/vue-monacoなどの非公式なサードパーティのラッパーは避けたいです。

Node / Vueの初心者です。


これに対する解決策を見つけましたか?私自身の例を探しています。
マリン

いいえ、質問に賞金を追加しました:)
testUser12 '15

回答:



2

webpackwebpack設定でモナコプラグインを指定してみてください:

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

...

plugins: [
  new monacoWebpackPlugin()
]

または、monaco-editor-webpack-pluginをインストールして、代わりにそれを使用してみてください:

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

...

plugins: [
  new monacoWebpackPlugin()
]

heightおよびについてはwidth、ウィンドウのサイズ変更をリッスンして呼び出す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;
}

(マイクロソフトから)モナコエディタ-のWebPACK-pluginの間違い働かないが、最初の選択肢はrequire('monaco-editor/webpack')、私のインストールではありません-何がある/webpacknode_modules/monaco-editor。どのように/何をインストールしましたか?
eric99

@ eric99正直なところ、最初の方法がうまくいったかどうか思い出せませんが、なんらかの理由で自分のプロジェクトの1つでそれがありました。わかりません、ここに含めただけです
Alex Hoffman

わかりました- package.jsonそれらのプロジェクトの情報があります。
eric99

私は別の(マイナーかもしれない)落とし穴を見つけました。エディターのサイズが反応しません。最初のロード後にdevtoolsを開いて幅を変更すると言っても、エディターのサイズは変更されません。私はどこかでmonaco.editor.create()、エディター中にコンテナー要素からサイズを取得することを読みました。VS Codeと同じ動作をするのが良いでしょう。
eric99

@ eric99ウィンドウのリサイズをリッスンし、editor.layout()コンテナーサイズを呼び出しまたは計算して、サイズをeditor.layout()メソッドに渡すことができます
Alex Hoffman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.