未定义-!window.ace时出现Angular 6 SSR错误。如何为Ace编辑器制作SSR包装器?

时间:2019-02-06 12:58:49

标签: angular6 ace-editor ssr

无法使用Angular 6上的Ace编辑器启动SSR。恐怕我需要一些SSR包装器,但是在AceEditorModule使用的Ace lib中已经存在一些是否存在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 :(得分:0)

尝试设置

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