【问题标题】:TypeError: Cannot Read Property 'CreateObjectURL' Of UndefinedTypeError:无法读取未定义的属性“CreateObjectURL”
【发布时间】:2019-11-29 04:38:53
【问题描述】:

我们有一个 Angular 应用程序,我正在尝试在我们现有的 Angular 搜索引擎优化和链接预览应用程序中实现服务器端渲染 (SSR):

Angular Version: 8.2.3

我执行的将其转换为SSR的步骤:

  1. 使用 Angular CLI 添加Angular Universal

ng add @nguniversal/express-engine --clientProject {{ name of your project }}

  1. 我正在使用的构建命令

npm run build:ssr && npm run serve:ssr

  1. 我使用 domino 在 server.ts 添加的窗口对象和其他填充物
import fs from 'fs';
const template = fs.readFileSync(join(DIST_FOLDER, 'index.html')).toString();
import { Blob } from "blob-polyfill";

const win = domino.createWindow(template);
global['window'] = win;
global['document'] = win.document;
global["branch"] = null;
global["object"] = win.object;
global["HTMLElement"] = win.HTMLElement;
global["navigator"] = win.navigator;
global['Blob'] = Blob;

/** NOTE :: leave this as require() since this file is built Dynamically from webpack */
const {AppServerModuleNgFactory, LAZY_MODULE_MAP, ngExpressEngine, provideModuleMap} = require('./dist/server/main');

/** Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine) */
app.engine('html', ngExpressEngine({
  bootstrap: AppServerModuleNgFactory,
  providers: [
    provideModuleMap(LAZY_MODULE_MAP)
  ]
}));

我试图检查它是否是任何 3rd 方包,如果它导致错误,我可以理解它是 aws-aplify-angular,在其中,有 aws-lex-audio.js 包含导致该错误的行。甚至我也没有使用包含该文件的interactions module。但仍然没有运气。

我尝试过的解决方案,

如果有帮助,我尝试使用放大模块化方法排除 interactions 模块

    {
        provide: AmplifyService,
        useFactory:  () => {
          return AmplifyModules({
            Auth,
            Storage,
          });
        }
    },
]

有什么办法可以消除这个错误?

【问题讨论】:

  • 嗯,我也有同样的问题。现在正在尝试修复它。
  • @Veslav 你修好了吗?
  • @BecarioSenior 是的,下面的解决方案对我有用,我的网站 royhonders.com 现已上线。

标签: angular angular-universal aws-amplify server-side-rendering


【解决方案1】:

这里的问题是您使用的是aws-amplify-angular,并且您在模块中的某个位置导入了它。

这也将导入交互模块,即使您不需要使用它。只要确保不要使用这个模块就可以了。

【讨论】:

  • 这里有同样的问题。我从项目中删除了所有 Amplify 部门,并逐步重新开始。这个问题只是在 AngularAmplifyModule 放在 AppModule 中时出现。 AmplifyService 的工厂加载对其没有影响。仍然没有解决办法。 aws-amplify-angular": "^4.1.2"
  • 除了操作提到的错误之外,这个文件 aws-lex-audio.js 会显着降低下载(服务器处理)的性能。我怀疑 aws-amplify-angular 与 angular-universal 不兼容,尽管官方文档对此只字未提。 github.com/aws-amplify/amplify-js/issues/3115
  • @BecarioSenior 我完全同意这两种说法。确保从 AppModule 中删除的 AngularAmplifyModule 将解决 OP 的问题。虽然它与 angular-universal 并不真正兼容,但它确实很糟糕。
猜你喜欢
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多