当我提供 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)
禁用优化选项对于生产环境无效,因为您的性能会很差。
现在我认为简单的修复方法是降级为: "@angular-devkit/build-angular": "^16.1.1" 而不是 16.1.4
我在 angular-cli 存储库中创建了一个问题 https://github.com/angular/angular-cli/issues/25529
我的问题与
domino
包有关,因此我删除了它,并且必须将 document
、window
等的所有实例包装在平台检查中。
domino
包rm -rf node_modules
rm -rf package-lock.json
npm i
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;
}
...
}
我的解决方案:
在 package.json 中我已经改变了 "多米诺骨牌": "2.1.6", 到
“多米诺骨牌”:“https://github.com/ndr/domino.git#87c3ef9d60965ded1e713893c3b7c32a421958b1”,
将 domino 包链接到自己的 fork,但有一些导致错误的解决方法。这对我有用。
我的解决方案。
检查文件 Angular.json 并将 server.options.optimization 的值更改为 false。我不知道问题到底出在哪里,虽然它在我的项目中解决了这个问题。
希望对你有帮助。