angular - 由于第三方库,Angular App Shell 构建失败
问题描述
我无法让 Angular App Shell 正常工作。所以我按照说明配置了通用项目。然后我也设置了App Shell,可以看到我的angular.json底部的配置不错。但现在当我跑步时
ng run proj:app-shell
我得到窗口未定义的错误。该错误是有道理的,因为我使用了直接使用窗口的第三方库(在本例中为 ckeditor),但无法从服务器端 Node.js 环境访问窗口。
但是我不确定为什么我会收到这个错误,因为 ckeditor 是在一个不同的组件中使用的,它不应该是 app-shell 的一部分。
这是我的 app.component.html
<app-nav-menu></app-nav-menu>
<div class="page-body" [ngClass]="{'sidebar-expanded': (sidebarExpanded | async)}">
<app-sidebar></app-sidebar>
<div class="page-content-wrapper">
<div class="content-viewport">
<router-outlet></router-outlet>
</div>
</div>
</div>
<ngx-spinner type="ball-grid-beat" color="#696ffb" bdColor="rgba(200, 200, 200, 0.8)" size="medium"></ngx-spinner>
app-nav-menu、app-sidebar 和 ngx-spinner 组件都没有使用 ckeditor!ckeditor 在我在 app.module.ts 中导入的 ElementsModule 中的 text-element-component 内部使用
import { ElementsModule } from './elements/elements.module';
但是为什么我的 app-shell 构建失败了,它不应该使用 app.module.ts,而是 app.server.module.ts,对吧?我在这里缺少什么吗?
解决方案
我在这上面浪费了很多时间。问题是 ckeditor 脚本在加载时立即引用了窗口,因此它在以下行中崩溃:
import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
我在组件构造函数中使用了动态导入:
import('@ckeditor/ckeditor5-build-classic').then(e => { this.editor = e; });
推荐阅读
- python - 如何在不保存本地的情况下操作数据
- c++ - 避免复制重复使用的特征块
- python - Heroku python 在主要要求之前安装先决条件
- c++ - 如何比较两个 tm(来自 ctime)变量
- r - 按行号返回向量的元素
- angular - 使用响应式表单的 HTML 数字输入显示必需的验证器错误而不是无效模式
- javascript - 所有设备中的点击事件都会检测到触摸设备中的触摸吗?
- docker - 通过 VPN 从 Docker 恢复 Dotnet
- javascript - 在数组 Ramda 中通过 id 查找对象
- macos - wxPython macOS 暗模式支持和 pyinstaller