Uncaught DOMException: не удалось выполнить «importScripts» для «WorkerGlobalScope»: не удалось загрузить сценарий «http://localhost: 9000 / worker- html. js» - PullRequest
0 голосов
/ 25 марта 2020

Я использую Ace Editor в своем приложении Angular. Здесь определяется - https://www.npmjs.com/package/ng2-ace-editor

Использование:

. html

<ace-editor id="editor" class="form-control" formControlName="answer" [ngClass]="validateField('answer')" [(text)]="text"></ace-editor>

.ts

ngAfterViewInit(){

    this.editor = ace.edit('editor');
         ace.config.set('basePath', '/assets/ui/');
         ace.config.set('modePath', '/assets/ui/');
         ace.config.set('themePath', '/assets/ui/');
        ace.config.setModuleUrl('ace/mode/php_worker','/assets/ui/worker-php.js');
        ace.config.setModuleUrl('ace/mode/coffee_worker','/assets/ui/worker-coffee.js');
        ace.config.setModuleUrl('ace/mode/css_worker','/assets/ui/worker-css.js');
        ace.config.setModuleUrl('ace/mode/javascript_worker','/assets/ui/worker-javascript.js');
        ace.config
.setModuleUrl('ace/mode/html_worker','/assets/ui/worker-html.js');
        ace.config.setModuleUrl('ace/mode/json_worker','/assets/ui/worker-json.js');
        ace.config.setModuleUrl('ace/mode/lua_worker','/assets/ui/worker-lua.js');
        ace.config.setModuleUrl('ace/mode/xml_worker','/assets/ui/worker-xml.js');
        ace.config.setModuleUrl('ace/mode/xquery_worker','/assets/ui/worker-xquery.js');
        this.editor.setTheme('ace/theme/eclipse');
}

1) Я получаю следующую ошибку:

blob:http://localhos…99f9-cccd48bdb093:1 Uncaught DOMException: Failed to execute 'importScripts' on 'WorkerGlobalScope': The script at 'http://localhost:9000/worker-html.js' failed to load. at blob:http://localhost:9000/9446350d-625c-418b-99f9-cccd48bdb093:1:1

Почему это так?

2) Я не смог найти назначение этих рабочих файлов, и откуда они включаются.

1 Ответ

0 голосов
/ 26 марта 2020

Мне пришлось сделать две вещи, чтобы код работал

в коде, добавить путь

ace.config.set('basePath', '/assets/ui/');
    ace.config.set('modePath', '/assets/ui/');
    ace.config.set('themePath', '/assets/ui/');
    ace.config.set('workerPath','/assets/ui/');

Добавить следующий код в angular.json

"assets": [
              "src/assets",
              "src/favicon.ico",
              {
                "glob": "**/*",
                "input": "./node_modules/ace-builds/src/",
                "output": "/"
              }
            ],

            "scripts": [
              "./node_modules/ace-builds/src/ace.js",
              "./node_modules/ace-builds/src/theme-eclipse.js",
              "./node_modules/ace-builds/src/theme-monokai.js",
              "./node_modules/ace-builds/src/mode-html.js"
            ]

Все ace файлы находятся в /node_modules/ace-builds/src/. строка glob делает их доступными в outDir, где Angular создаст окончательную сборку. В моем случае это ../public/ui, откуда я строю код angular. Таким образом, все файлы ace будут на самом деле go до ../public/ui/. Причина, по которой я использую assets, заключается в том, что я использую сервер Play, который обращается к ресурсам, используя assets в пути. Таким образом, чтобы получить файлы, он будет вызывать, например, localhost:9000/assets/ui/worker-html.js. В приложении play я использую маршрут для сопоставления всех /assets/... запросов с /public/... path

GET     /assets/*file               controllers.Assets.versioned(path="/public", file: Asset)
...