Угловая ошибка 6 SSR пока -! Window.ace не определена.Как сделать оболочку SSR для редактора Ace? - PullRequest
0 голосов
/ 06 февраля 2019

Не могу запустить SSR с редактором Ace на Angular 6. Я боюсь, что там мне нужна оболочка для SSR, но в Ace lib, который используется AceEditorModule, уже существуют некоторые условия для существования window.ace или нет, ноон не работает должным образом.

  • "ng2-ace-editor": "^ 0.3.8"
  • Угловой 6.0.7

любые идеи, какчтобы это исправить?

npm run start:ssr

> my-project@0.0.0 start:ssr I:\FRONTEND\Projects\Github\my-project - UNEXPECTED ERRORS
> node dist/server.js

I:\FRONTEND\Projects\Github\my-project - UNEXPECTED ERRORS\dist\server.js:254298
                    if (!window.ace)
                    ^

ReferenceError: window is not defined
    at I:\FRONTEND\Projects\Github\my-project - UNEXPECTED ERRORS\dist\server.js:254298:21
    at _acequire (I:\FRONTEND\Projects\Github\my-project - UNEXPECTED ERRORS\dist\server.js:235317:37)
    at Object.acequire (I:\FRONTEND\Projects\Github\my-project - UNEXPECTED ERRORS\dist\server.js:235322:26)

IIFE, которые выдают эту ошибку и пытаются обработать объект окна с помощью ace lib внутри: node_modules/ace-builds/src/ace.js

(function() {
  window.require(["ace/ace"], function(a) {
    if (a) {
      a.config.init(true);
      a.define = window.define;
    }
    if (!window.ace)
      window.ace = a;
      for (var key in a) if (a.hasOwnProperty(key))
        window.ace[key] = a[key];
        window.ace["default"] = window.ace;
        if (typeof module == "object" && typeof exports == "object" && module){
          module.exports = window.ace;
        }
     });
})();

также использование пакета npm brace как зависимость, и в этом также мы видим этот код, но он немного отличается.И я не знаю, как проверить, какой из кода lib выдает эту ошибку.node_modules/brace/index.js:

(function() {
                ace.acequire(["ace/ace"], function(a) {
                    if (a) {
                        a.config.init(true);
                        a.define = ace.define;
                    }
                    if (!window.ace)
                        window.ace = a;
                    for (var key in a) if (a.hasOwnProperty(key))
                        window.ace[key] = a[key];
                });
            })();

1 Ответ

0 голосов
/ 06 февраля 2019

попробуйте установить

 if (typeof window == "undefined")
     global.window = global
...