angular 6库中的动态导入

angular 6库中的动态导入,angular,typescript,lib,dynamic-import,Angular,Typescript,Lib,Dynamic Import,我已经使用Angular cli创建了一个示例Angular 6库 ng新的测试库 ngg库我的库 这为我提供了角度库“my lib”和示例应用程序“test lib”的基本结构,我认为它们可以用于测试目的 在库中,我想使用动态导入。我有一个类应该延迟导入: export class Lazy { print(): void { console.log('I am lazy'); } } 我有我的消费者部分: export class MyLibComponen

我已经使用Angular cli创建了一个示例Angular 6库

  • ng新的测试库
  • ngg库我的库
  • 这为我提供了角度库“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中,我将“module”更改为esnext,以支持动态导入

    现在,我想使用示例应用程序中的库,它是由cli生成的。因此,在app.module.ts内部,我导入库的模块,并在app.component.ts的模板中添加相应的选择器

    当我现在用“ng build”或以“ng serve”开始构建示例应用程序时,我可以看到没有生成“惰性块”。它只是普通的main、polyfill、运行时、样式和供应商。我错过了什么?不能在库内部使用动态加载吗

    当我从编译的dist文件夹更改app.module.ts内部的导入路径时

    import { MyLibModule } from 'my-lib';
    
    到图书馆的源代码

    import { MyLibModule } from '../../projects/my-lib/src/public_api';
    
    创建了惰性块,一切都按预期进行。但那当然不是我想要的。我想在一个完全不同的项目中使用编译后的库,在这个项目中我无法从typescript源导入

    编辑:我的问题摘要
    库本身是否可以执行动态加载,或者此功能是否仅适用于主应用程序以延迟加载应用程序的其他部分或其他库

    编辑:问题原因
    我的库由数百个生成的typescript类组成。每个用例只需要几个。这些应按需加载

    谢谢你的帮助

    斯蒂芬

    它正按预期完美工作。您只需构建库,将其放置在需要的位置,并在另一个项目中使用dynamic
    import
    方法,并使用相对路径引用已构建的库


    Angular CLI不构建块的原因是,它将源代码中未引用的任何内容从树中删除。如果导入未指向惰性区块,则在应用程序上调用
    ng build
    ng serve
    时,它认为没有理由构建它。但是
    ng build my lib
    仍将显式构建模块。

    谢谢您的回答,但我不想延迟加载整个库。相反,库本身应该延迟加载库的其他部分。因此,动态导入必须留在库中。给我一个问题的理由:这个库将由数百个生成的类组成,但根据用例的不同,只需要几个。所以它不是一个大库的选项,相反,我需要将库拆分为许多小部分,这些小部分被延迟加载。嗯。。。措辞非常混乱,但我建议为需要延迟加载的部件创建额外的库。延迟加载意味着关注点的分离,因此必须将代码拆分为子库,类似于将
    @angular
    拆分为无数子库的方式,如
    @angular/core
    @angular/router
    @angular/common
    您尝试过吗?我看不出有任何理由认为它不是。我建议在库中放置多个动态导入,并构建它以查看构建输出是什么。我没有看到任何相反的证据,是的。这就是我在第一篇文章中用这个小示例库试图解释的。@StephanU你找到解决方案了吗?我正在寻找一种从我的库中懒洋洋地加载路由的方法。谢谢你的帮助。