代码之家  ›  专栏  ›  技术社区  ›  Jack

未捕获参考错误:新t.MonacoWorkspace没有定义摩纳哥

  •  0
  • Jack  · 技术社区  · 5 年前

    我只是在 example 文件夹(进行了一些修改,使monaco edit typescript而非json(我开始了解如何使用monaco api),如下所示),但我在控制台窗口上遇到了一些错误,而autcompleter不起作用,只有语法突出显示。

    错误是:

    Uncaught ReferenceError: monaco is not defined
        at new MonacoWorkspace (main.bundle.js:157068)
        at create (main.bundle.js:157028)
        at Object.install (main.bundle.js:157034)
        at Object../lib/client.js (main.bundle.js:2132)
        at __webpack_require__ (main.bundle.js:64)
        at Object../lib/main.js (main.bundle.js:2202)
        at __webpack_require__ (main.bundle.js:64)
        at main.bundle.js:199
        at main.bundle.js:202
    
    Uncaught (in promise) Error: Unexpected usage
        at EditorSimpleWorker.loadForeignModule (:4200/editor.worker.bundle.js:8995)
        at SimpleWorkerServer._handleMessage (:4200/editor.worker.bundle.js:6629)
        at Object.handleMessage (:4200/editor.worker.bundle.js:6615)
        at SimpleWorkerProtocol._handleMessage (:4200/editor.worker.bundle.js:6484)
        at SimpleWorkerProtocol.handleMessage (:4200/editor.worker.bundle.js:6457)
        at SimpleWorkerServer.onmessage (:4200/editor.worker.bundle.js:6619)
        at self.onmessage (:4200/editor.worker.bundle.js:10166)
    

    修改后的客户端和服务器如下所示:

    客户ts

    import { listen, MessageConnection } from 'vscode-ws-jsonrpc';
    import * as monaco from 'monaco-editor'
    import {
        MonacoLanguageClient, CloseAction, ErrorAction,
        MonacoServices, createConnection
    } from 'monaco-languageclient';
    import normalizeUrl = require('normalize-url');
    const ReconnectingWebSocket = require('reconnecting-websocket');
    
    // register Monaco languages
    monaco.languages.register({
        id: 'typescript',
        extensions: ['.ts'],
        aliases: ['TypeScript','ts','TS','Typescript','typescript']
    })
    
    // create Monaco editor
    const value = `
    let message:string = 'foo'
    `;
    
    monaco.editor.create(document.getElementById("container")!, {
        model: monaco.editor.createModel(value, 'typescript', monaco.Uri.parse('file:///C:\\Users\\foo\\Desktop\\project\\demo\\ts\\file.ts')),
        glyphMargin: true,
        theme: "vs-dark",
        lightbulb: {
            enabled: true
        }
    });
    
    // install Monaco language client services
    MonacoServices.install(monaco)
    
    // create the web socket
    const url = createUrl('ws://localhost:3000/ws')
    const webSocket = createWebSocket(url);
    // listen when the web socket is opened
    listen({
        webSocket,
        onConnection: connection => {
            // create and start the language client
            const languageClient = createLanguageClient(connection);
            const disposable = languageClient.start();
            connection.onClose(() => disposable.dispose());
        }
    });
    
    function createLanguageClient(connection: MessageConnection): MonacoLanguageClient {
        return new MonacoLanguageClient({
            name: "Sample Language Client",
            clientOptions: {
                // use a language id as a document selector
                documentSelector: ['typescript'],
                // disable the default error handler
                errorHandler: {
                    error: () => ErrorAction.Continue,
                    closed: () => CloseAction.DoNotRestart
                }
            },
            // create a language client connection from the JSON RPC connection on demand
            connectionProvider: {
                get: (errorHandler, closeHandler) => {
                    return Promise.resolve(createConnection(connection, errorHandler, closeHandler))
                }
            }
        });
    }
    
    function createUrl(path: string): string {
        return normalizeUrl(path);
    }
    
    function createWebSocket(url: string): WebSocket {
        const socketOptions = {
            maxReconnectionDelay: 10000,
            minReconnectionDelay: 1000,
            reconnectionDelayGrowFactor: 1.3,
            connectionTimeout: 10000,
            maxRetries: Infinity,
            debug: false
        };
        return new ReconnectingWebSocket(url, [], socketOptions);
    }
    

    服务器ts

    import * as express from "express";
    
    const app = express();
    app.use(express.static(__dirname));
    app.listen(4200)
    
    0 回复  |  直到 5 年前
    推荐文章