Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] Cannot read properties of undefined (reading 'toUrl') #4739

Open
1 of 2 tasks
13751139402 opened this issue Nov 5, 2024 · 14 comments
Open
1 of 2 tasks

[Bug] Cannot read properties of undefined (reading 'toUrl') #4739

13751139402 opened this issue Nov 5, 2024 · 14 comments

Comments

@13751139402
Copy link

Reproducible in vscode.dev or in VS Code Desktop?

  • Not reproducible in vscode.dev or VS Code Desktop

Reproducible in the monaco editor playground?

Monaco Editor Playground Link

Image
Image
why

Monaco Editor Playground Code

No response

Reproduction Steps

No response

Actual (Problematic) Behavior

No response

Expected Behavior

No response

Additional Context

No response

@taokepppooo
Copy link

@jefferyE
Copy link

jefferyE commented Nov 6, 2024

https://github.com/microsoft/monaco-editor/blob/main/docs/integrate-esm.md

Image

I used Vite, but it doesn't work.

@dribble-njr
Copy link

Same issue in rspack.

self.MonacoEnvironment = {
  getWorker: function (moduleId, label) {
    if (label === 'json') {
      return new Worker(
        new URL(
          'monaco-editor/esm/vs/language/json/json.worker',
          import.meta.url
        )
      );
    }
    if (label === 'css' || label === 'scss' || label === 'less') {
      return new Worker(
        new URL('monaco-editor/esm/vs/language/css/css.worker', import.meta.url)
      );
    }
    if (label === 'html' || label === 'handlebars' || label === 'razor') {
      return new Worker(
        new URL(
          'monaco-editor/esm/vs/language/html/html.worker',
          import.meta.url
        )
      );
    }
    if (label === 'typescript' || label === 'javascript') {
      return new Worker(
        new URL(
          'monaco-editor/esm/vs/language/typescript/ts.worker',
          import.meta.url
        )
      );
    }
    return new Worker(
      new URL('monaco-editor/esm/vs/editor/editor.worker', import.meta.url)
    );
  },
};

@dribble-njr
Copy link

dribble-njr commented Nov 15, 2024

I tried downgrading to 0.50.0 and it solved.

@cemremengu
Copy link

Using vite, could not get it to work. Any solutions so far?

@francois-frvr
Copy link

For me it worked after I packed the code (self.MonacoEnvironment = {...) into its own file and imported it before the monaco-editor

import "./monacoWorker";
import * as monaco from 'monaco-editor';

const editor = monaco.editor.create(/* ... */);

@adarter-tc
Copy link

self.MonacoEnvironment.getWorkerUrl is not a function
Uncaught Error: Cannot read properties of undefined (reading 'toUrl')

Image

@adarter-tc
Copy link

adarter-tc commented Nov 30, 2024

self.MonacoEnvironment.getWorkerUrl is not a function
Uncaught Error: Cannot read properties of undefined (reading 'toUrl')

Image

importing separately solves the errors for me.

import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution';
import 'monaco-editor/esm/vs/basic-languages/html/html.contribution';
import 'monaco-editor/esm/vs/basic-languages/css/css.contribution';
import 'monaco-editor/esm/vs/basic-languages/xml/xml.contribution';
import 'monaco-editor/esm/vs/basic-languages/yaml/yaml.contribution';
import 'monaco-editor/esm/vs/basic-languages/markdown/markdown.contribution';
import 'monaco-editor/esm/vs/language/json/monaco.contribution.js';

@cemremengu
Copy link

cemremengu commented Dec 2, 2024

I ended up using this for vite from the https://www.npmjs.com/package/@monaco-editor/react readme

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(/* ... */);

@licc12
Copy link

licc12 commented Dec 12, 2024

I tried downgrading to 0.50.0 and it solved.

tks, but I get a new error tips:
Image

@qiushuangHu
Copy link

`
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();
},
};

const editor = monaco.editor.create(/* ... */);
`

@zhy2014
Copy link

zhy2014 commented Dec 26, 2024

我尝试降级到 0.50.0 并且解决了问题。

谢谢,但是我收到一个新的错误提示: Image

解决了吗

@whale2002
Copy link

whale2002 commented Feb 14, 2025

I tried using version 0.50.0 and finally solved the problem.

First, 0.52.0 -> 0.50.0

Second, import worker file from cdn like unpkg

export const ensureMonacoEnvironment = () => {
  self.MonacoEnvironment = {
    getWorkerUrl: () =>
      `data:text/javascript;charset=utf-8,${encodeURIComponent(`
        self.MonacoEnvironment = {
          baseUrl: 'https://unpkg.com/[email protected]/min/'
        };
        importScripts('https://unpkg.com/[email protected]/min/vs/base/worker/workerMain.js');`)}`,
  };
};

Import this function in the file using the monaco editor and execute it. Now I have no error

@whale2002
Copy link

我尝试降级到 0.50.0 并且解决了问题。

谢谢,但是我收到一个新的错误提示: Image

解决了吗

解决了看我下面的评论

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests