无法使用Angular 6上的Ace编辑器启动SSR。恐怕我需要一些SSR包装器,但是在AceEditorModule使用的Ace lib中已经存在一些是否存在window.ace的条件,但是它无法正常工作。
有什么解决办法吗?
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];
});
})();
答案 0 :(得分:0)
尝试设置
if (typeof window == "undefined")
global.window = global