类似于this question,我构建了具有多个功能模块的自定义Angular库(使用 Angular CLI 7.2.0 ):
MyLibraryModule
FeatureModule1
SomeComponent1
FeatureModule2
SomeComponent2
我只想将一个功能模块导入我的主应用程序,就像我们可以对Angular Material模块(import { MatButtonModule } from '@angular/material';
)进行的操作一样:
import { FeatureModule1 } from 'my-library';
...
@NgModule({
imports: [
...,
FeatureModule1,
]
})
...
这会导致以下错误(在构建主项目期间):
ERROR in : Unexpected value 'FeatureModule1 in ./node_modules/my-library/my-library.d.ts'
imported by the module 'AppModule in ./src/app/app.module.ts'.
Please add a @NgModule annotation.
当我将库模块(import { MyLibraryModule } from 'my-library';
)导入主应用程序时,一切正常。
my-library.module.ts 看起来像这样:
import { NgModule } from '@angular/core';
import { FeatureModule1 } from './feature-module-1/feature-module-1.module';
import { FeatureModule2 } from './feature-module-2/feature-module-2.module';
@NgModule({
imports: [ FeatureModule1, FeatureModule2 ],
exports: [ FeatureModule1, FeatureModule2 ],
})
export class MyLibraryModule{ }
我的public_api.ts
导出所有模块。
我认为这与打包过程有关,因为在我的测试项目(与库位于同一文件夹中)中,此工作没有任何问题。
我已经尝试从@angular/material
改编building process,但看来,他们的做法与 official 的方式有些不同。
答案 0 :(得分:1)
问题是,我在index.ts
导入的功能模块(public_api.ts
)中使用了barrel files,如下所示:
import * from './feature-module-1';
但是,如here所述,您必须直接指向桶文件。否则,软件包的.d.ts
文件不会包含所有导出。因此,我的public_api.ts
中的以下行解决了该问题:
import * from './feature-module-1/index';