monaco-react icon indicating copy to clipboard operation
monaco-react copied to clipboard

Use monaco-editor as a local package, but a worker-related error occurs

Open Sky-FE opened this issue 3 years ago • 13 comments

Describe the bug I refer to the usage method in the documentation and use monaco-editor as a local package. The following is the sample code:

import * as monaco from 'monaco-editor';
import MonacoEditor, {  loader } from '@monaco-editor/react';

loader.config({
  monaco,
});

But after using it in my project, it produces the following error:

Uncaught (in promise) Error: Unexpected usage
    at EditorSimpleWorker.loadForeignModule (editorSimpleWorker.js:460:1)
    at webWorker.js:38:1

Screenshots image

Desktop

  • OS: [macOS]
  • Browser [Chrome]
  • Version [105.0.5195.102]

Additional context

Is there any good way to solve the above problem?

Sky-FE avatar Sep 25 '22 16:09 Sky-FE

With CRA you need to use an additional webpack-plugin.

With Vite, you can do the following:

import { loader } from "@monaco-editor/react";

import * as monaco from "monaco-editor";
import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker"
import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker"
import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker"
import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker"
import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker"

self.MonacoEnvironment = {
  getWorker(_, label) {
    if (label === "json") {
      return new jsonWorker()
    }
    if (label === "css" || label === "scss" || label === "less") {
      return new cssWorker()
    }
    if (label === "html" || label === "handlebars" || label === "razor") {
      return new htmlWorker()
    }
    if (label === "typescript" || label === "javascript") {
      return new tsWorker()
    }
    return new editorWorker()
  }
}

loader.config({ monaco });

loader.init().then(/* ... */);

suren-atoyan avatar Sep 26 '22 09:09 suren-atoyan

@suren-atoyan Yes, i have used monaco-editor-webpack-plugin, but still getting the same error.

Sky-FE avatar Sep 26 '22 15:09 Sky-FE

I had the same error in my react project.

"@monaco-editor/react": "^4.4.6", "react": "^16.8.6",

import * as monaco from "monaco-editor"; import Editor, { loader } from "@monaco-editor/react"; loader.config({ monaco }); image

austzyl avatar Nov 20 '22 14:11 austzyl

Same error here. Works perfectly, however it just spams my console with these errors.

import * as monaco from "monaco-editor"
import Editor, {loader} from "@monaco-editor/react";

loader.config({monaco});

function App() {
  return (
    <div className="App">
      <Editor height={"90vh"} defaultLanguage={"javascript"} defaultValue={"const bubble = () => {console.log('yeet')}"}/>
    </div>
  );
}

export default App;

image

Business99 avatar Nov 28 '22 14:11 Business99

@suren-atoyan Is it supposed to work with plain esbuild? (no Vite)

jakajancar avatar Dec 21 '22 13:12 jakajancar

@jakajancar I've never tested it with plain esbuild, do you get errors with esbuild?

suren-atoyan avatar Jan 01 '23 16:01 suren-atoyan

The ?worker syntax is something added by Vite, it’s not in stock esbuild, so I’m not sure how to set this up nicely.

jakajancar avatar Jan 01 '23 19:01 jakajancar

And happy New Year! :)

jakajancar avatar Jan 01 '23 19:01 jakajancar

@Business99 have u found way to fix the error? I got the same issues

RobertCLian avatar Feb 15 '23 10:02 RobertCLian

Hi all, have the same error. Did you solved it? @suren-atoyan could you help us please i also use monaco-editor-webpack-plugin but it's unsuccessfully

vladtimss avatar Apr 20 '23 09:04 vladtimss

I resolved this error in esbuild

(window as any).MonacoEnvironment = {
  getWorker: (workerId: string, label: string) => {
    if (label === 'json') {
      return new Worker(
        new URL('monaco-editor/esm/vs/language/json/json.worker?worker', import.meta.url),
      );
    }
    return new Worker(new URL('monaco-editor/esm/vs/editor/editor.worker?worker', import.meta.url));
  },
};

NoManPlay avatar Jun 29 '23 03:06 NoManPlay


using
"@monaco-editor/react": "^4.5.1"
"monaco-editor": "^0.40.0"

this conf work!

import * as monaco from "monaco-editor"
import jsonworker from "monaco-editor/esm/vs/language/json/json.worker.js"
import editorWorker from "monaco-editor/esm/vs/editor/editor.worker.js"
import Editor, { loader } from "@monaco-editor/react/";

...

(window as any).MonacoEnvironment = {
  getWorkerUrl: (workerId: string, label: string) => {
    if (label === 'json') {
      return new jsonworker()
    }
    return new editorWorker()
    }
  };
  
loader.config({ monaco });

<Editor
  language={'json'}
/>

hljwwyy123 avatar Jul 24 '23 08:07 hljwwyy123

same +1

image

GuanJdoJ avatar Nov 10 '23 01:11 GuanJdoJ