【发布时间】:2018-10-08 09:11:19
【问题描述】:
我使用 Angular cli 创建了一个示例 Angular 6 库
- ng 新的测试库
- ng g library my-lib
这为我提供了 Angular 库“my-lib”和我认为可用于测试目的的示例应用程序“test-lib”的基本结构。
在库中,我想使用动态导入。我有一个应该延迟导入的类:
export class Lazy {
print(): void {
console.log('I am lazy');
}
}
我有我的消费者组件:
export class MyLibComponent implements OnInit {
async ngOnInit() {
const lazyImport = await import(/* webpackChunkName: 'lazy' */ './lazy');
new lazyImport.Lazy().print();
}
}
差不多就是这样。我使用“ng build my-lib”将库编译到 dist 文件夹。在 tsconfig 中,我将“模块”更改为 esnext,以支持动态导入。
现在我想使用示例应用程序内部的库,它是由 cli 生成的。所以在 app.module.ts 中,我导入了库的模块,在 app.component.ts 的模板中,我添加了相应的选择器。
当我现在使用“ng build”或从“ng serve”开始构建示例应用程序时,我可以看到没有生成“惰性块”。它只是普通的 main、polyfills、runtime、styles 和 vendor。我错过了什么?难道不能在库中使用动态加载吗?
当我从已编译的 dist 文件夹中更改 app.module.ts 内的导入路径时
import { MyLibModule } from 'my-lib';
到库源代码
import { MyLibModule } from '../../projects/my-lib/src/public_api';
创建了惰性块,一切都按预期工作。但这当然不是我想要的。我想在一个完全不同的项目中使用编译的库,我无法从打字稿源导入。
编辑:我的问题摘要
库本身是否可以执行动态加载,或者此功能是否仅适用于 main-app 以延迟加载应用程序的其他部分或其他库?!
编辑:问题原因
我的库包含数百个生成的打字稿类。每个用例只需要几个。这些应该按需加载。
感谢您的帮助!
斯蒂芬
【问题讨论】:
-
你试过了吗?我看不出有任何理由假设它没有。我建议在库中放置多个动态导入,并构建它以查看构建输出是什么。我在这里没有看到任何相反的证据。
-
是的,我做到了。这就是我试图用第一篇文章中的这个小示例库来解释的内容。
-
@StephanU 你找到解决方案了吗?我正在寻找一种从我的库中懒加载路由的方法。感谢您的帮助。
标签: angular typescript lib dynamic-import