Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度7 SSR-NgZone的问题_Angular_Webpack_Server Side Rendering_Zone.js_Ngzone - Fatal编程技术网

Angular 角度7 SSR-NgZone的问题

Angular 角度7 SSR-NgZone的问题,angular,webpack,server-side-rendering,zone.js,ngzone,Angular,Webpack,Server Side Rendering,Zone.js,Ngzone,我最近把公司的网站从React改为Angular,因为我们的大多数项目都已经在Angular 7上了。作为“使用最新和最伟大”的人,我决定实施服务器端渲染,使谷歌页面速度接近100/100(目前为42/100)。这周的大部分时间里,我一直在修补它,但没有成功——最新的障碍对我来说尤其难以克服。以下是有关我的设置的简要信息,然后我将详细介绍: 节点8.9.1 角度7最新 网页4.26.0 @ngtools/webpack 7.0.5 不使用angular cli AoT设置 单页应用程序 这是

我最近把公司的网站从React改为Angular,因为我们的大多数项目都已经在Angular 7上了。作为“使用最新和最伟大”的人,我决定实施服务器端渲染,使谷歌页面速度接近100/100(目前为42/100)。这周的大部分时间里,我一直在修补它,但没有成功——最新的障碍对我来说尤其难以克服。以下是有关我的设置的简要信息,然后我将详细介绍:

  • 节点8.9.1
  • 角度7最新
  • 网页4.26.0
  • @ngtools/webpack 7.0.5
  • 不使用angular cli
  • AoT设置
  • 单页应用程序
这是我在尝试呈现为SSR设置的layout.html文件时遇到的错误:

TypeError: Cannot read property 'subscribe' of undefined
at new ApplicationRef (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:43263:37)
at _createClass (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:46296:20)
at _createProviderInstance (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:46258:26)
at initNgModule (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:46190:32)
at new NgModuleRef_ (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:46918:9)
at createNgModuleRef (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:46907:12)
at Object.debugCreateNgModuleRef [as createNgModuleRef] (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:48738:12)
at NgModuleFactory_.module.exports.NgModuleFactory_.create (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:49466:25)
at C:\code\lemmsoftWebsite\repo\node_modules\@angular\core\bundles\core.umd.js:14656:47
at ZoneDelegate.module.exports.ZoneDelegate.invoke (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:139510:26)
at Object.onInvoke (C:\code\lemmsoftWebsite\repo\node_modules\@angular\core\bundles\core.umd.js:14194:37)
at ZoneDelegate.module.exports.ZoneDelegate.invoke (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:139509:32)
at Zone.module.exports.Zone.run (C:\code\lemmsoftWebsite\repo\public\site\serverBuild\main.js:139260:43)
at NgZone.run (C:\code\lemmsoftWebsite\repo\node_modules\@angular\core\bundles\core.umd.js:14108:32)
at PlatformRef.bootstrapModuleFactory (C:\code\lemmsoftWebsite\repo\node_modules\@angular\core\bundles\core.umd.js:14654:27)
at renderModuleFactory (C:\code\lemmsoftWebsite\repo\node_modules\@angular\platform-server\bundles\platform-server.umd.js:1033:43)
at View.module.app.engine (C:\code\lemmsoftWebsite\repo\modules\clients\site\layout\index.js:60:4)
at View.render (C:\code\lemmsoftWebsite\repo\node_modules\express\lib\view.js:135:8)
at tryRender (C:\code\lemmsoftWebsite\repo\node_modules\express\lib\application.js:640:10)
at Function.render (C:\code\lemmsoftWebsite\repo\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (C:\code\lemmsoftWebsite\repo\node_modules\express\lib\response.js:1008:7)
at C:\code\lemmsoftWebsite\repo\modules\clients\site\layout\index.js:83:9
在仔细阅读main.js捆绑包文件之后,我已经指出了以下问题:

var ApplicationRef=/**@class*/(函数(){
/**@内部*/
函数ApplicationRef(_zone、_console、_injector、_exceptionHandler、_componentFactoryResolver、_initStatus){
var_this=这个;
this.\u zone=\u zone;//在此方法中,\u zone参数为{},因此其中没有onMicrotaskEmpty方法=>当尝试此.\u zone.onMicrotaskEmpty.subscribe()时,我们得到“无法读取未定义的属性'subscribe'”
这个。_console=_console;
这个。_注入器=_注入器;
此.\u exceptionHandler=\u exceptionHandler;
此.\u componentFactoryResolver=\u componentFactoryResolver;
这个。_initStatus=_initStatus;
这个。_bootstrapListeners=[];
这个。_视图=[];
这是。_runningTick=false;
这._enforceNoNewChanges=false;
这个._stable=true;
//更多代码
}
//更多代码

}
网页必须是
模式:“开发”

如果你能用fork重现问题,a会有所帮助。

ZoneJS不能作为AMD模块正常工作。你使用的是SystemJS AMD extra,zone.js绑定到UMD格式——这会导致zone被用作AMD模块,从而触发破坏行为

完整解释,并在zone.js上发布-

问题的最低限度证明-


解决方法-

只是在黑暗中拍摄,可以将
import'zone.js/dist/zone node'
移动到顶部,就像在第一次导入时包含它一样。谢谢:)这是我尝试的第一件事-以前它位于polyfills文件的顶部。遗憾的是,没有区别:(原始抛出的上下文:
…clients\site\layout\index.js:83:9
?这是我的服务器设置代码片段-res.render(path.join('../../../../../public/site/layout.html'),{req,res}中的渲染行。您能在github上提供最小的复制吗?