Angular SSR 错误 - “instanceof”的右侧不是对象

问题描述 投票:0回答:4

当我提供 SSR 产品构建时,我的 Angular 项目中出现以下错误。这是在我将 Angular 从 16.0 升级到 16.1 后发生的,当我恢复回来时就消失了。可能是什么问题?

TypeError: Right-hand side of 'instanceof' is not an object
    at insertElement (/angular/dist/server/main.js:1:479144)
    at insertHTMLElement (/angular/dist/server/main.js:1:478866)
    at before_head_mode (/angular/dist/server/main.js:1:516818)
    at HTMLParser.htmlparser.insertToken (/angular/dist/server/main.js:1:477890)
    at emitSimpleTag (/angular/dist/server/main.js:1:483071)
    at data_state (/angular/dist/server/main.js:1:483109)
    at scanChars (/angular/dist/server/main.js:1:474652)
    at Object.parse (/angular/server/main.js:1:472719)
    at exports2.createDocument (/angular/server/main.js:1:710626)
    at exports2.createWindow (/angular/dist/server/main.js:1:711129)

ng 版本如下:-

angular angular-universal
4个回答
4
投票

禁用优化选项对于生产环境无效,因为您的性能会很差。

现在我认为简单的修复方法是降级为: "@angular-devkit/build-angular": "^16.1.1" 而不是 16.1.4

我在 angular-cli 存储库中创建了一个问题 https://github.com/angular/angular-cli/issues/25529


0
投票

我的问题与

domino
包有关,因此我删除了它,并且必须将
document
window
等的所有实例包装在平台检查中。

  1. 从 package.json 中删除
    domino
  2. rm -rf node_modules
  3. rm -rf package-lock.json
  4. npm i
  5. 包裹 DOM 对象的所有实例,例如
    window
    document
    例如:
import { PLATFORM_ID, Inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';

export class SomeClass {
constructor(
    @Inject(PLATFORM_ID) private platformId: any
  ) { }

  ngOnInit(): void {

    if(isPlatformBrowser(this.platformId)) {
     someFunction()
    }

  }

someFunction() {
return window.location;
}

...
}

0
投票

我的解决方案:

在 package.json 中我已经改变了 "多米诺骨牌": "2.1.6", 到

“多米诺骨牌”:“https://github.com/ndr/domino.git#87c3ef9d60965ded1e713893c3b7c32a421958b1”,

将 domino 包链接到自己的 fork,但有一些导致错误的解决方法。这对我有用。


-1
投票

我的解决方案。

检查文件 Angular.json 并将 server.options.optimization 的值更改为 false。我不知道问题到底出在哪里,虽然它在我的项目中解决了这个问题。

希望对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.